Функция мыши в JQuery определяется как .click(handler)
, так почему я не могу сделать следующее:Почему a.click (b.toggle) не работает?
var object1 = $("#object1");
var object2 = $("#object2");
object1.click(object2.toggle);
Ниже, однако, работает:
var object1 = $("#object1");
var object2 = $("#object2");
object1.click(function() { object2.toggle(); });
Вопрос в том, почему я нужно инкапсулировать обработчик функции в другую функцию, чтобы она работала? Я знаю, что в первом примере, функция toggle
будет получать все данные события, но это, похоже, не влияет (также, то же самое происходит с другими функциями, такими как show
, hide
, fadeIn
и т.д.)
UPDATE:
что касается аргументов, это также, кажется, работает:
var object1 = $("#object1");
var object2 = $("#object2");
object1.click(function(ev) { object2.toggle(ev); });
Итак, недопустимые аргументы, кажется, не является проблемой.
ОТВЕТ:
Объяснение проблемы, что сказал @SeanWessell, вот JSFiddle показывает проблему таким образом, я лучше понял его. Это не имеет никакого отношения к jQuery: https://jsfiddle.net/diegojancic/nffcnu8t/
Ну 'щелчок()' принимает обратный вызов, Вам нужна функция для того, чтобы вызвать его. может быть способ сделать закрытие в ECMA-скрипте 6, но я не уверен. – Nicolas
'toggle' также является функцией и должен быть действительным обратным вызовом, как я его вижу. –
@charlietfl функция click получает только один аргумент, если я выполняю 'function (a, b, c) {}', тогда 'b' и' c' являются 'undefined'. –