2个选择器,2个不同的事件,相同的function

我正在使用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()为您做了)。 您可以使用输入和选择元素所在的

document

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

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

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

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

HTML:

   

脚本:

 $( 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 ); }; }; 
 $('input').on('keyup', do_something); $('select').on('change', do_something); 

请注意,从jQuery 1.7开始,不推荐使用.live()方法。 使用.on()来附加事件处理程序。 旧版jQuery的用户应该使用.delegate()而不是.live()

如果您需要类似live()的function,请使用:

 $(document).on('keyup change', 'input, select', do_something); 
 $(".my_selector").live("keyup change", function({ do_something(); 

});

如果您将类my_selectror添加到元素中,这应该有效。

请注意,.live方法已被严重弃用。 http://api.jquery.com/live/

从jQuery 1.7开始,不推荐使用.live()方法。 使用.on()附加事件处理程序。 旧版jQuery的用户应该使用.delegate()而不是.live()。

使用.on()方法,您可以执行以下操作:

 $("input, select").on("focusout", function(){ alert( "focus lost on " + $(this).attr("id") ); }); 

使用焦点输出事件,您可以在任何输入字段或选择项目失去焦点时执行某些操作(即,用户已移至另一个现在处于焦点的项目)。