我有这样的功能
$("#button1").on("click", clickEvent);
function clickEvent(someParameter){
console.log(someParameter);
}
如何在这种情况下将某些值(例如:1)传递给clickEvent函数?
答案 0 :(得分:2)
如果向.on()提供了数据参数,并且该参数不为null或未定义, 它每次都传递给event.data属性中的处理程序 事件被触发。 data参数可以是任何类型,但如果是字符串 使用选择器必须提供或显式传递为 null,以便数据不会被误认为是选择器。最佳做法是 使用普通对象,以便可以传递多个值 属性。
function greet( event ) {
alert( "Hello " + event.data.name );
}
$( "button" ).on( "click", {
name: "Karl"
}, greet );
$( "button" ).on( "click", {
name: "Addy"
}, greet );
答案 1 :(得分:1)
参数始终是事件,但您可以使用闭包来获取更多数据到您的回调中
$("#button1").on("click", function(){clickEvent(1);});
function clickEvent(someParameter){
console.log(someParameter);
}
答案 2 :(得分:0)
您无法控制传递哪些参数。它始终是传递给处理函数的事件对象。
答案 3 :(得分:0)
您也可以使用Function.prototype.bind
,但您将失去this
参数:
$("#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);
}
}
但是tobyodavies的答案是最合适的解决方案。
答案 4 :(得分:0)
如果参数都像你的示例原语和常量,你可以简单地执行此操作:
function addClickEvent(param){
var clickEvent=Function('var param = "'+param+'"; alert(param);');
$("#button1").on("click", clickEvent);
}
addClickEvent(1);
但这并不意味着如果你的param是有点对象你不能这样做。只是解决方案会有所不同,例如:
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);
}
答案 5 :(得分:0)
你可以试试这个:
(function() {
var args = arguments;
function clickEvent(){
return function(e) {
return args; // [1,2,3,4];
}();
}
keys.on('click',clickEvent);
})(1,2,3,4);
答案 6 :(得分:-1)
只需传递你所称的值
$("#button1").on("click", function(){clickEvent("1");});
function clickEvent(someParameter){
console.log(someParameter);
}
当你需要通过函数传递值时,你必须在调用它时传递,你已经在“someParameter”中定义它,你可以将一些值传递给函数。 “someParameter”将作为函数内部的变量。
你也可以像这样使用这个功能
var somevar = "1";
$("#button1").on("click", function(){clickEvent(somevar);});
function clickEvent(someParameter){
console.log(someParameter);
}