$(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
答案 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 handler
:http://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;