Как вызвать обычную функцию JS с параметрами в jQuery? - PullRequest
1 голос
/ 08 апреля 2010

Есть ли другой способ запустить обычную функцию JS с передаваемыми параметрами, чем то, что я использую ниже?
Кажется избыточным использование для этого функции на ходу.

function regularJSfunc(param1,param2) {
  // do stuff
}
$(document).ready(function(){
  $('#myId').change(function(){
      regularJSfunc('data1','data2');
    });
}

Использованиесобытие .bind кажется намного лучше, однако я не уверен, как получить доступ к параметрам.
Примечание : Пример ниже не работает.

$(document).ready(function(){
  $('#myId').bind('change',{'data1','data2'},regularJSfunc);
}

Ответы [ 4 ]

2 голосов
/ 08 апреля 2010

Кроме использования bind() и свойств события, вы можете использовать приложение с частичной функцией :

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 голос
/ 08 апреля 2010

Во втором примере данные должны быть map.

function myFunc( event )
{
alert( event.data.data1 );
//or alert( event.data['data1'] );
}

$(document).ready(function(){
  $('#myId').bind('change',{'data1':'some data'},myFunc);
}
0 голосов
/ 08 апреля 2010

номер

обработчики событий jQuery получают объект function, который они будут вызывать с одним аргументом, eventObject . Если вы хотите передать свои собственные аргументы, то у вас есть альтернатива - передача промежуточной функции, которая вызовет вашу последнюю функцию с нужными аргументами.

Вы можете достичь этого эффекта, передав анонимную функцию, как вы сами представили в своем рабочем примере. Это также стандартный способ (с стандартом , означающий то, что я вижу, что все делают ) вызова обычной функции с пользовательскими аргументами из привязки события jQuery.

0 голосов
/ 08 апреля 2010

Вот что вы пытались сделать:

$(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...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...