如何在jQuery中使用params调用常规JS函数?

时间:2010-04-08 11:49:58

标签: javascript javascript-events jquery

是否有另一种方法来运行常规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);
}

4 个答案:

答案 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...
}