使用on()将params传递给函数

时间:2016-05-18 08:55:32

标签: javascript jquery

    $(document).on('click', '#my', myFunc('param'));

function myFunc(param){
    //do something
}

这个snytax错了吗?我收到jquery-1.10.2.min.js:3 Uncaught TypeError: ((x.event.special[i.origType] || (intermediate value)).handle || i.handler).apply is not a function

的错误

3 个答案:

答案 0 :(得分:3)

您可以将数据对象作为on()的第三个参数发送,如下所示:

$(document).on('click', '#my', {p: 'World'}, myFunc);

并且在函数中,当事件被触发时,您可以使用event.data访问数据对象:

function myFunc(event) {
  console.log('Hello, ' + event.data.p);
}

请参阅此页Passing data to the handlerhttp://api.jquery.com/on/#passing-data

答案 1 :(得分:1)

您没有使用某个参数绑定myFunc,而是调用函数myFunc('param')并绑定该方法调用的结果。

执行所需操作的一种方法是将调用包含在另一个函数中:

$(document).on('click', '#my', function() { myFunc('param') });

答案 2 :(得分:0)

这确实是错误的。 '上' callback期望[http://api.jquery.com/on/]一个事件作为第一个参数。在它的当前形式中,您的代码没有机会工作,因为myFunc(' param')不是一个函数(它是它的评估结果)。

你可以这样简单地包装内部函数:

$(document).on('click', '#my', function() { myFunc('param'); });

function myFunc(param){
    //do something
}

但是如果你想在那个处理程序中正确使用jquery,你需要绑定它:

$(document).on('click', '#my', function() { myFunc.bind(this)('param'); });

    function myFunc(param){
        //do something
    }

您还可以让您的函数返回另一个函数:

$(document).on('click', '#my', myFunc('param') );

    function myFunc(param){
         return function() {
         };
    }

这是一个完整的小提琴



function myFunc1(p) {
  return function() {
    $(this)[0].innerHTML = "modified by " + p;
  };
}

function myFunc2(p) {
    $(this)[0].innerHTML = "modified by " + p;
}

$(document).on("click", "#one", myFunc1("inner wrapping"));
$(document).on("click", "#two", function() { myFunc2.bind(this)("outer wrapping");});

div {
  width: 300px;
  background-color: yellow;
  text-align: center;
  margin-top: 10px;
  }

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="one">one</div>
<div id="two">two</div>
&#13;
&#13;
&#13;

相关问题