У меня есть переключатель, содержащий инлайн onclick
событие:Достоверно добавление к событию Javascript
<input type="radio" class="quantitycheckbox" onclick="alterQuantity(this.form)">
Я пытаюсь ненавязчиво добавить больше функциональных возможностей по щелчку, и этот код:
function updateCustomFields(box) {
// save current onclick event before assigning new one
var currEvent = box.onclick;
box.onclick = function() {
currEvent();
// do additional stuff here
}
}
var boxes = $class('quantitycheckbox');
for(var i = 0; i < boxes.length; i++) {
updateCustomFields(boxes[i]);
}
Однако значение this.form
, которое передано в функцию alterQuantity
, не определено, и я получаю сообщение об ошибке. Как я могу зарезервировать событие onclick
как есть и добавить свои функции?
Как это * правильный * способ? И где документировано, что обработчик событий, установленный через свойство 'onclick', гарантированно запускается первым во всех браузерах? –
@Tim, события всегда выполняются по порядку. Поскольку обработчики inline 'onclick' сначала« зарегистрированы »(вы не можете добавлять событие в элемент DOM до его существования, и как только он существует, встроенный обработчик уже привязан к элементу). Это правильный путь из-за того, насколько сильно я чувствую, что логику следует хранить отдельно от структуры. Я думаю, что я хотел быть в кавычках, чтобы он обнаружил мою предвзятость ... Я отредактирую :) –
Взаимодействие между встроенными событиями и стандартом W3 DOM Events (не говоря уже о беспорядке IE) не стандартизировано вообще. Хотя, когда IE, Mozilla, WebKit и Opera все согласны с чем-то, вы, как правило, на победителя. – bobince