Почему бы не оставить функцию $ (document) .click (), чтобы скрыть разделение, а затем добавить эту функцию в код и вызывать ее вместо event.stopPropagation ():
function stopPropAndCloseDiv2(event) {
$('#div2').hide();
event.stopPropagation();
};
Я проверил это, и кажется, что оно будет работать нормально. Вам просто нужно помнить, чтобы использовать его.
UPDATE:
Это грызло меня, и я нашел другой ответ на этом замечательном сайте, который я знаю. Вот ссылка:
добавить код в функцию программно с помощью JS
Я попробовал этот подход, и он, кажется, работает: http://jsfiddle.net/kXkFS/8/
Вот код (в разметке тестовой страницы есть две кнопки):
jQuery.Event.prototype.stopPropagation = (function() {
var cached_function = jQuery.Event.prototype.stopPropagation;
return function() {
if ( this.type == "click") {
// Your logic here.
console.log("I am a modified version of event.stopPropagation()!");
}
cached_function.apply(this, arguments); // use .apply() to call it.
};
}());
$(document).click( function() { console.log("The document caught the event, too."); });
$('#clicker').click( function() { console.log("I'm going to let this event bubble."); });
$('#anotherClicker').click( function(event) { event.stopPropagation(); });
Спойлер: когда вы нажимаете кнопку "кликер", документ также попадает в консоль. Когда вы нажимаете кнопку «anotherClicker», пользовательская функция event.stopPropagation () регистрируется на консоли, а документ не регистрируется на консоли. Теперь вы можете добавить обработчик событий щелчка в документ.
Одна вещь: это может добавить некоторые накладные расходы, но только если вы часто вызываете stopPropagation ().
Если кто-то захочет оценить мудрость использования такого объекта jQuery, пожалуйста, сделайте это. Интересно, но я не вижу, чтобы такие безобидные изменения, как эта, взорвали веб-страницу в будущем.