Javascript 如何在Jquery中将参数传递给回调函数?

Javascript 如何在Jquery中将参数传递给回调函数?,javascript,jquery,Javascript,Jquery,我有一个这样的函数 $("#button1").on("click", clickEvent); function clickEvent(someParameter){ console.log(someParameter); } var somevar = "1"; $("#button1").on("click", function(){clickEvent(somevar);}); function clickEvent(someParameter){ console.log(s

我有一个这样的函数

$("#button1").on("click", clickEvent);

function clickEvent(someParameter){
  console.log(someParameter);
}
var somevar = "1";

$("#button1").on("click", function(){clickEvent(somevar);});

function clickEvent(someParameter){
console.log(someParameter);
}

在这种情况下,如何将一些值(例如:1)传递给clickEvent函数?

您无法控制传递哪些参数。传递到处理程序函数中的始终是事件对象。

来自:

如果向.on()提供了一个数据参数,并且该参数不是null或未定义, 每次 事件被触发。数据参数可以是任何类型,但如果是字符串 使用时,必须提供选择器或将其显式传递为 null,这样数据就不会被误认为是选择器。最佳实践是 使用普通对象以便可以将多个值作为 财产


参数始终是事件,但您可以使用闭包将更多数据放入回调

$("#button1").on("click", function(){clickEvent(1);});

function clickEvent(someParameter){
  console.log(someParameter);
}

只需将值传递到调用它的位置

$("#button1").on("click", function(){clickEvent("1");});

function clickEvent(someParameter){
  console.log(someParameter);
}
当您需要通过函数传递值时,必须在调用它时传递,因为您已经在“someParameter”中定义了它,您可以将一些值传递给函数。“someParameter”将作为函数内的变量

你也可以像这样使用这个函数

$("#button1").on("click", clickEvent);

function clickEvent(someParameter){
  console.log(someParameter);
}
var somevar = "1";

$("#button1").on("click", function(){clickEvent(somevar);});

function clickEvent(someParameter){
console.log(someParameter);
}

您也可以使用
Function.prototype.bind
,但会丢失
参数:

$("#button1").on("click", clickEvent.bind(null, 1));

function clickEvent(someParameter){
    console.log(someParameter);
    // in here, `this` no longer refers to the button
}
或者以稍微不同的方式使用闭包:

$("#button1").on("click", makeClickEventHandler(1));

function makeClickEventHandler(someParameter){
    return function(event) {
        console.log(someParameter);
    }
}

但托比奥戴维斯的答案是这里最适用的解决方案。

如果参数都像您的示例原语和常量,您可以简单地执行以下操作:

function addClickEvent(param){
    var clickEvent=Function('var param = "'+param+'"; alert(param);');
    $("#button1").on("click", clickEvent);
}
addClickEvent(1);
但这并不意味着如果你的参数是某种对象,你就不能这样做。只是解决方案会有所不同,比如:

function addClickEvent(param){
    window._allParams=[];
    var pindex =_allParams.push(param) - 1;
    var clickEvent=Function('var param =window._allParams['+pindex+']; alert(param);');
    $("#button1").on("click", clickEvent);
}
您可以尝试以下方法:

(function() {

 var args = arguments;

 function clickEvent(){
  return function(e) {
     return args; // [1,2,3,4];
  }();
 }

 keys.on('click',clickEvent);

})(1,2,3,4);

您是否尝试过:$(“#按钮1”)。在(“单击”,单击事件(某些值))@阿伦:只有当
clickEvent()
返回一个函数时,它才起作用。1不,这不起作用,因为你没有调用它,事件是你注意到它在你单击之前是如何记录的,而在你单击时是如何记录的?更正了,正在工作,但是。。。为什么?这感觉像是一种可怕的做事方式