我正在使用jQuery 1.7并且需要将相同的函数绑定到2个不同的选择器上的2个不同的直播事件,例如: function do_something(_this){ // do something with _this alert("test");}$("input").live("keyup", function({ do_s
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 ); }; };