Надежное добавление к событию Javascript - PullRequest
0 голосов
/ 18 января 2010

У меня есть переключатель, содержащий встроенное событие onclick:

<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 как есть и добавил бы свою функциональность?

Ответы [ 2 ]

2 голосов
/ 18 января 2010

Вам не нужно ничего делать с встроенным событием onclick. Простое присоединение другого события с помощью attachEvent или addEventListener решит вашу проблему, поскольку встроенное событие onclick всегда будет запускаться первым:

function updateCustomFields( box ) {
    var myCallback = function(){
      // Do stuff here
    }
    if(window.addEventListener){
      box.addEventListener('click', myCallback, false);
    } else if (window.attachEvent){
      box.attachEvent('onclick', myCallback);
    }
}

Порядок исполнения будет:

  1. Встроенное событие
  2. Ваше новое событие
1 голос
/ 18 января 2010

Попробуйте:

currentEvent.call(box);

для передачи box в качестве значения this в currentEvent();

edit : решение Дуга на самом деле лучше,В любом случае, методы call и apply, доступные для всех объектов функций, - это способ изменения значения this в вызовах функций.

...