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