我如何将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不是一个对象,所以触发这个事件的元素的正常值被使用)以及参数arg1arg2arg2 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 );