当前位置 : 主页 > 网页制作 > JQuery >

jquery – 2个选择器,2个不同的事件,相同的功能

来源:互联网 收集:自由互联 发布时间:2021-06-15
我正在使用jQuery 1.7并且需要将相同的函数绑定到2个不同的选择器上的2个不同的直播事件,例如: function do_something(_this){ // do something with _this alert("test");}$("input").live("keyup", function({ do_s
我正在使用jQuery 1.7并且需要将相同的函数绑定到2个不同的选择器上的2个不同的直播事件,例如:

function do_something(_this){
  // do something with _this
  alert("test");
}

$("input").live("keyup", function({
  do_something($(this));
});

$("select").live("change", function({
  do_something($(this));
});

这有效,但我真的很想,如果我能以某种方式把所有这些都归结为一个陈述,比如:

// pseudo code
( $("input").live("keyup") || $("select").live("change") ).bind(function(){
  // do something with $(this)
  alert("test");
});

那可能吗?

您可以直接将do_something()函数放入.live()函数中,避免使用匿名函数.这节省了一些字符.

$("input").live("keyup", do_something );
$("select").live("change", do_something );

要转换为jQuery 1.7语法,您需要使用委托(.live()为您做了).您可以使用< form>输入和选择元素的位置或文档.

$( document ).on( "keyup", "input", do_something );
$( document ).on( "change", "select", do_something );

如果你真的想把两个事件和选择器放在一个电话中,你可以.因为你无论如何都要使用相同的功能,因为你使用的是一个委托,所以总共只有两个事件.如果你真的认为你需要它,你可以检查回调中的事件,以确保正确的选择与选择器匹配(正如我在演示中所示).

$( document ).on( "keyup change", "input, select", do_something );

演示:http://jsfiddle.net/ThinkingStiff/6ZUMa/

HTML:

<input />
<select>
    <option>1</option>
    <option>2</option>
</select>

脚本:

$( document ).on( 'keyup change', 'input, select', do_something );

function do_something( event ) {

    //this if() statement probably isn't needed for your purposes
    if( ( event.type == 'keyup' && event.target.tagName.toLowerCase() == 'input' )
      || ( event.type == 'change' && event.target.tagName.toLowerCase() == 'select' ) ) {

        //process event here
        $( 'input' ).val( event.type );

    };

};
网友评论