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

时间:2014-01-13 21:24:40

标签: javascript jquery

我有这样的功能

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

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

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

7 个答案:

答案 0 :(得分:2)

来自jQuery API Documentation

  

如果向.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);
}