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不,这不起作用,因为你没有调用它,事件是你注意到它在你单击之前是如何记录的,而在你单击时是如何记录的?更正了,正在工作,但是。。。为什么?这感觉像是一种可怕的做事方式