2014-01-13 6 views
0

У меня есть функция, как этотКак передать параметры функции обратного вызова в JQuery?

$("#button1").on("click", clickEvent); 

function clickEvent(someParameter){ 
    console.log(someParameter); 
} 

Как я могу передать некоторое значение (напр: 1) в clickEvent функции в этой ситуации?

+0

Вы пробовали это: $ ("# Button1").on ("click", clickEvent (some_value)); – Alen

+1

@Alen: Это работает только в том случае, если 'clickEvent()' возвращает функцию – Eric

ответ

1

Аргументы всегда событие, но вы можете использовать замыкание, чтобы получить больше данных в ваш обратный вызов

$("#button1").on("click", function(){clickEvent(1);}); 

function clickEvent(someParameter){ 
    console.log(someParameter); 
} 
0

Вы не контролируете, какие параметры передаются. Это всегда объект события, который передается в функцию обработчика.

2

От jQuery API Documentation:

Если аргумент данные предоставляется .on() и не является нулевым или не определено, оно передается обработчику в event.data собственности каждый раз, событие запускается. Аргумент данных может быть любым типом, но если используется строка , селектор должен быть предоставлен или явно передан как null, чтобы данные не были ошибочными для селектора. Лучшей практикой является , чтобы использовать простой объект, чтобы можно было передать несколько значений как .

function greet(event) { 
    alert("Hello " + event.data.name); 
} 
$("button").on("click", { 
    name: "Karl" 
}, greet); 
$("button").on("click", { 
    name: "Addy" 
}, greet); 
-1

просто передать значение, где вы вызываете его

$("#button1").on("click", function(){clickEvent("1");}); 

function clickEvent(someParameter){ 
    console.log(someParameter); 
} 

, когда вам нужно передать значение через функцию, вы должны пройти при вызове, где вы уже определяете его на «someParameter», что вы можете передать некоторую оценку чтобы функционировать. «someParameter» будет действовать как переменная внутри функции.

вы также можете использовать эту функцию, как этот

var somevar = "1"; 

$("#button1").on("click", function(){clickEvent(somevar);}); 

function clickEvent(someParameter){ 
console.log(someParameter); 
} 
+0

** - 1 ** Нет, это не работает, потому что вы не звоните_, событие – Eric

+0

Вы заметили, как эти журналы перед вами клик, и не регистрируется _when_ вы нажимаете? – Eric

+0

Исправлено, теперь работа – akhan

0

Вы также можете использовать Function.prototype.bind, но вы потеряете this аргумент:

$("#button1").on("click", clickEvent.bind(null, 1)); 

function clickEvent(someParameter){ 
    console.log(someParameter); 
    // in here, `this` no longer refers to the button 
} 

Или используют замыкания в несколько ином виде:

$("#button1").on("click", makeClickEventHandler(1)); 

function makeClickEventHandler(someParameter){ 
    return function(event) { 
     console.log(someParameter); 
    } 
} 

Но ответ на вопрос является м ost применимое решение здесь.

0

если параметры все, как ваш пример примитивным и постоянная вы можете просто сделать это:

function addClickEvent(param){ 
    var clickEvent=Function('var param = "'+param+'"; alert(param);'); 
    $("#button1").on("click", clickEvent); 
} 
addClickEvent(1); 

, но это не значит, если ваши пары являются своим родом объект, который вы не можете сделать это. только решение будет differe, как:

function addClickEvent(param){ 
    window._allParams=[]; 
    var pindex =_allParams.push(param) - 1; 
    var clickEvent=Function('var param =window._allParams['+pindex+']; alert(param);'); 
    $("#button1").on("click", clickEvent); 
} 
+0

Но ... почему? Это похоже на ужасно ужасный способ сделать что-то – Eric

0

Вы можете попробовать это:

(function() { 

var args = arguments; 

function clickEvent(){ 
    return function(e) { 
    return args; // [1,2,3,4]; 
    }(); 
} 

keys.on('click',clickEvent); 

})(1,2,3,4); 
Смежные вопросы