我如何将parameter passing给jQuery中的事件处理程序?
使用jQuery代码:
$("#myid").click(myfunction); function myfunction(arg1, arg2) {/* something */}
如何在使用jQuery时将parameter passing给myfunction
?
最简单的方法就是这样做(假设你不想传递给函数的任何事件信息)…
$("#myid").click(function() { myfunction(arg1, arg2); });
jsFiddle 。
这将创build一个匿名函数,当click
事件被触发时会被调用。 这将依次用您提供的参数调用myfunction()
。
如果你想保留ThisBinding
(当函数被调用时的值,设置到触发事件的元素),然后用call()
调用函数。
$("#myid").click(function() { myfunction.call(this, arg1, arg2); });
jsFiddle 。
你不能以你的例子的方式直接传递引用,或者它的单个参数是jQuery event
对象 。
如果你想传递引用,你必须利用jQuery的proxy()
函数(这是一个用于Function.prototype.bind()
的跨浏览器封装)。 这可以让你传递在event
参数之前绑定的参数。
$("#myid").click($.proxy(myfunction, null, arg1, arg2));
jsFiddle 。
在这个例子中, myfunction()
将会被完整的执行( null
不是一个对象,所以触发这个事件的元素的正常值被使用)以及参数arg1
, arg2
和arg2
jQuery event
对象,如果不需要,可以忽略它(甚至不要在函数的参数中命名)。
你也可以使用jQuery event
对象的data
来传递数据,但是这需要修改myfunction()
来通过event.data.arg1
来访问它(这不是像你提到的问题那样的函数参数 ),或者至less需要引入一个手册代理函数就像前面的例子,或者使用后一个例子生成代理函数。
$("#myid").on('click', {arg1: 'hello', arg2: 'bye'}, myfunction); function myfunction(e) { var arg1 = e.data.arg1; var arg2 = e.data.arg2; alert(arg1); alert(arg2); } //call method directly: myfunction({ arg1: 'hello agian', arg2: 'bye again' });
还允许您使用on和off方法绑定和解除绑定特定的事件处理程序。
例:
$("#myid").off('click', myfunction);
这将从#myid解除绑定myfunction处理程序
虽然你当然应该使用Alex的答案,但是原型库的“绑定”方法已经在Ecmascript 5中标准化了,很快将在浏览器中实现。 它是这样工作的:
jQuery("#myid").click(myfunction.bind(this, arg1, arg2));
旧线程,但用于search目的; 尝试:
$(selector).on('mouseover',...);
…并查看“data”参数: http : //api.jquery.com/on/
例如:
function greet( event ) { alert( "Hello " + event.data.name ); } $( "button" ).on( "click", {name: "Karl"}, greet ); $( "button" ).on( "click", {name: "Addy"}, greet );