У меня есть некоторый код JavaScript / jQuery, который отслеживает «измененное» событие в флажке:
$(control).change(function() {
alert("changed to: " + $(this).is(":checked"));
});
Это отлично работает.
Я хотел бы создать ссылку на функцию change () для конкретного объекта и вызвать ее косвенно, например, так:
var onSomeChange = $(control).change;
onSomeChange(function() {
alert("changed to: " + $(this).is(":checked"));
});
Мне нужно вызвать его косвенно, потому что я хочу поменять метод, который я назначаю onSomeChange, на другой, в зависимости от обстоятельств. (Единственное назначение onSomeChange приведено здесь только для иллюстрации).
Это не работает. В Firebug я получаю эту ошибку:
this.bind не является функцией
Как я могу получить ссылку на метод объекта и вызвать его, не вызывая его непосредственно из объекта?
Фон
Контекст может быть значительным; если есть совершенно другой способ делать то, что я хочу, то это тоже нормально.
Поведение события change
в JavaScript немного отличается для флажков и переключателей. Флажок срабатывает каждый раз, когда меняется его состояние (отмечено или не отмечено). Однако переключатели (по крайней мере, в Firefox; я думаю, что это еще сложнее в других браузерах) запускают изменения только для группы переключателей в целом. Это понятно, но я хочу привязать различные действия к состояниям отдельных переключателей. (В частности, я хочу скрыть или показать некоторые элементы div в зависимости от состояния переключателя).
Я думаю, что могу справиться с расхождениями в событиях, привязав пользовательское событие к каждой радиостанции и затем запустив его на основе change
в группе. Поэтому я расширил jQuery для добавления метода radioChange (). Этот метод
Теперь я хотел бы заменить этот код чем-то, что вызывает другой метод обработки событий в зависимости от типа элемента управления. (Помимо: это потому, что переключатели, кажется, обрабатываются иначе, чем флажки, поэтому у меня другое событие, относящееся к переключателям). Я добавил метод расширения radioChanged () в jQuery для поддержки этого.
Теперь я хочу иметь метод, который регистрирует прослушиватель на change () или radioChanged () в зависимости от типа объекта. Определить это легко:
var change = $(control).is(":radio") ? $(control).radioChange : $(control).change;
Проблема в том, что я на самом деле не могу вызвать метод по ссылке change
, не генерируя ошибку выше.
Есть что-то еще, что я должен сделать, чтобы сделать эту работу?