Распространение события в JavaScript

Подход

  1. сериализирует форму (и все ее значения) прежде, чем показать, что это ( jQuery путь , Прототип путь )
  2. сериализирует его снова в "onbeforeunload" обработчик событий

, Если эти два не соответствуют, то они, должно быть, изменили форму, так возвратите строку (например, "Вы не сохранили данные") от Вашего onbeforeunload обработчик.

Этот метод позволяет полям формы развиваться, в то время как "подтверждают, если изменено" логику, остается тем же.

Пример (смешал JavaScript и jQuery)

var form_clean;

// serialize clean form
$(function() { 
    form_clean = $("form").serialize();  
});

// compare clean and dirty form before leaving
window.onbeforeunload = function (e) {
    var form_dirty = $("form").serialize();
    if(form_clean != form_dirty) {
        return 'There is unsaved form data.';
    }
};

12
задан 5 October 2009 в 23:39
поделиться

2 ответа

события почти всегда всплывают, если не установлено event.cancelBubble = true или не используется event.stopPropagation (). Однако вы осознаете это только тогда, когда одно из ваших событий срабатывают обработчики.

См. http://en.wikipedia.org/wiki/DOM_events для получения списка всплывающих событий. (Примечание: в таблице событий HTML, cancelable относится к эффективности event.preventDefault () или return false для отмены действия по умолчанию, а не пузыря)

См. Также http://www.w3.org /TR/DOM-Level-2-Events/events.html#Events-flow, в частности 1.2.1 Basic Flow, чтобы понять фазу захвата и фазу восходящей цепочки распространения событий.

РЕДАКТИРОВАТЬ

http: //mark-story.com/posts/view/speed-up-javascript-event-handling-with-event-delegation-and-bubbling предполагает прирост производительности за счет остановки распространения, но не предоставляет данных.

http://groups.google. com / group / Google-Web-Toolkit / browse_thread / thread / a9af0aa4216a8046 предполагает, что браузеры должны быть оптимизированы для поведения пузырьков, и говорит, что не должно быть значительной разницы в производительности. Снова нет данных.

http://developer.yahoo.com/performance/rules.html#events предоставляет хороший метод повышения производительности обработки событий, но не говорит напрямую о производительности stopPropagation.

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

17
ответ дан 2 December 2019 в 19:31
поделиться

Я полагаю, что это поведение уже хорошо оптимизировано браузерами, поэтому вы не сможете ощутить значительный прирост производительности при остановке распространения (за исключением, возможно, очень сложных вложенных структур DOM) . Если вас беспокоит производительность и вы имеете дело с множеством событий, вас может заинтересовать делегирование событий .

Кроме того, вы должны помнить, что ваш код должен оставаться читабельным и самоочевидным. stopPropagation () - это метод, используемый для определенных целей, поэтому его использование во всех методах может привести к путанице.

1
ответ дан 2 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: