Передача события jQuery в качестве переменной - PullRequest
1 голос
/ 26 февраля 2009

Вы можете сделать это с помощью JavaScript:

function bar(test) {
    alert(test);
}
var foo = bar;
foo('hi');

Я бы хотел сделать что-то подобное с событием jQuery:

var foo = $('#bork').click;
foo(function() { alert('I was just clicked.'); });

Однако при загрузке страницы появляется ошибка: this.bind is not a function. Я что-то не так делаю с событиями здесь? Есть ли лучший способ получить тот же эффект?

Ответы [ 5 ]

4 голосов
/ 26 февраля 2009

Другие ответы, похоже, не касаются технического вопроса:

Почему это работает:

$('#bork').click(function() { alert('I was just clicked.'); });

Но не это:

var foo = $('#bork').click;
foo(function() { alert('I was just clicked.'); });

Похоже, что оба они одинаковы, но проблема в том, что "this" в реализации функции click ссылается на объект jQuery в первом примере, но ссылается на foo во втором пример. Поскольку вы не определили foo.bind, вызов "this.bind" в реализации click завершится неудачей.

Вот отличная статья о плюсах и минусах привязки / области видимости в Javascript .

1 голос
/ 26 февраля 2009
$('#bork').bind('click', foo);
function foo() { alert('i was just clicked'); }
0 голосов
/ 26 февраля 2009

Вам нужно определить foo как функцию, чтобы ваш пример работал. Если вы немного измените определение foo, оно будет работать:

var foo = function(f) {$('#bork').click(f);};
foo(function() { alert('I was just clicked.'); });
0 голосов
/ 26 февраля 2009

Попробуйте следующее:

$("#bork").bind("click", function() { alert("I was just clicked"); });
0 голосов
/ 26 февраля 2009

Я думаю, вы ищете функцию bind.

$('#bork').bind("click", function() { 
    alert('I was just clicked.'); 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...