繁体   English   中英

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

[英]How to Pass parameters to callback functions in Jquery?

我有这样的功能

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

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

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

来自jQuery API文档

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

参数始终是事件,但您可以使用闭包来获取更多数据到您的回调中

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

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

您无法控制传递哪些参数。 它始终是传递给处理函数的事件对象。

您也可以使用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的答案是最合适的解决方案。

如果参数都像你的示例原语和常量,你可以简单地这样做:

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);

只需传递您调用它的值

$("#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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM