是否有另一种方法来运行常规JS函数,并且传递的params比我在下面使用的那样? 似乎多余的使用了一个在路上的功能来做到这一点。
function regularJSfunc(param1,param2) {
// do stuff
}
$(document).ready(function(){
$('#myId').change(function(){
regularJSfunc('data1','data2');
});
}
使用.bind事件似乎好多了,但我不知道如何访问params 注意:以下示例无效。
$(document).ready(function(){
$('#myId').bind('change',{'data1','data2'},regularJSfunc);
}
答案 0 :(得分:2)
除了使用bind()
和事件属性之外,您还可以使用partial function application:
Function.prototype.curry = function() {
var fn = this, args = Array.prototype.slice.call(arguments);
return function() {
return fn.apply(this, args.concat(
Array.prototype.slice.call(arguments)));
};
};
(Prototype.js内置了此扩展程序。)
然后你的代码看起来像
$(document).ready($('#myId').change(regularJSfunc.curry('data1','data2'));
答案 1 :(得分:1)
在第二个示例中,数据必须是map
。
function myFunc( event )
{
alert( event.data.data1 );
//or alert( event.data['data1'] );
}
$(document).ready(function(){
$('#myId').bind('change',{'data1':'some data'},myFunc);
}
答案 2 :(得分:0)
没有
jQuery event handlers会收到一个function
对象,他们将使用一个参数eventObject调用它们。如果你想传递自己的参数,那么你可以选择传递一个中间函数,它将使用你想要的参数调用你的最终函数。
您可以通过传递匿名函数来实现该效果,就像您在工作示例中提供的一样。这也是使用来自jQuery事件绑定的自定义参数调用常规函数的标准方式(标准意味着我看到每个人都在做)。
答案 3 :(得分:-1)
以下是您要做的事情:
$(function(){
$('#myId').bind('change',{'data':["data1","some data"]},regularJSfunc);
});
然后您可以访问这样的数据:
function regularJSfunc(e){
var data = e.data.data;
var data1 = data[0];
var someData = data[1];
// do stuff with the data...
}
和另一种方法:
$(function(){
$('#myId').bind('change',{"data1":"data1","someData":"some data"}, regularJSfunc);
});
然后您可以访问这样的数据:
function regularJSfunc(e){
var data1 = e.data.data1;
var someData = e.data.someData;
// do stuff with the data...
}