Подход
"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.';
}
};
события почти всегда всплывают, если не установлено 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.
В конечном итоге вам нужно будет профилировать разницу, чтобы получить хорошее представление о преимуществах вашего сайта.
Я полагаю, что это поведение уже хорошо оптимизировано браузерами, поэтому вы не сможете ощутить значительный прирост производительности при остановке распространения (за исключением, возможно, очень сложных вложенных структур DOM) . Если вас беспокоит производительность и вы имеете дело с множеством событий, вас может заинтересовать делегирование событий .
Кроме того, вы должны помнить, что ваш код должен оставаться читабельным и самоочевидным. stopPropagation ()
- это метод, используемый для определенных целей, поэтому его использование во всех методах может привести к путанице.