#javascript #jquery
#javascript #jquery
Вопрос:
У меня есть это ol
с li
s в нем. По щелчку ol
я хочу ol
, чтобы он был скрыт, но при нажатии на li
него он не должен скрываться. И это должно произойти, когда размер экрана ниже 768px
. Ниже приведен мой код
jQuery('ol.main-nav').click(function () {
if (jQuery(window).width() <= 768) {
jQuery('ol.main-nav > li ').click(function (event) {
event.stopPropagation();
})
jQuery('ol.main-nav').hide(100);
}
})
На самом деле, мой код скрывает ol.nav-main
. При использовании отладчика он не переходит в условие if, но все равно каким-то образом выполняет фрагмент кода.
Комментарии:
1. Можете ли вы создать рабочий образец, где мы могли бы его отладить?
Ответ №1:
Попробуйте этот способ:
jQuery('ol.main-nav').click(function () {
if (jQuery(window).width() <= 768) {
jQuery('ol.main-nav').hide(100);
}
});
jQuery('ol.main-nav > li ').click(function (event) {
if (jQuery(window).width() <= 768) {
event.stopPropagation();
}
})
Ответ №2:
Вы почти никогда не захотите подключать обработчик событий внутри другого обработчика событий.
У вас есть два варианта для того, что вы описываете:
-
Проверьте, когда происходит событие, чтобы увидеть, прошло ли оно через
li
:jQuery('ol.main-nav').click(function(event) { var t; if (jQuery(window).width() <= 768) { for (t = event.target; t != this; t = t.parentNode) { if (t.tagName == "LI") { return; // The click came through an LI } } jQuery('ol.main-nav').hide(100); } });
или
-
Добавьте обработчик в
li
s, который останавливает распространение. Это намного проще:jQuery('ol.main-nav').click(function () { if (jQuery(window).width() <= 768) { jQuery('ol.main-nav').hide(100); } }); jQuery('ol.main-nav > li').click(function(event) { event.stopPropagation(); // If you like check `width` here too });
Ответ №3:
Выполните событие с одним щелчком мыши, проверьте, является ли выбранный элемент элементом списка или если выбранный элемент является дочерним элементом элемента списка:
jQuery('ol.main-nav').click(function (e) {
if (jQuery(window).width() <= 768 amp;amp; jQuery(e.target).closest('ol.main-nav > li').length) {
e.preventDefault();
} else {
jQuery('ol.main-nav').hide(100);
}
});
Комментарии:
1. @T.J.Crowder проверьте, имеет ли элемент родительский элемент
ol.main-nav > li
2. @T.J.Crowder ницца этого не знал
3. Кроме того, вы не хотите
amp;amp;
в своем состоянии. Это должно быть «Если ширина <= 768 ИЛИ щелчок был наli
«.4. Не пытаюсь вас беспокоить, но вы также хотите
> 768
, нет<= 768
; вам нужно инвертировать условие, поскольку вы переместилиhide
его в anelse
.5. Я понимаю, что вы говорите (это относится и к моему
amp;amp;
комментарию). Я не думаю, что это то, чего хочет OP, но я могу ошибаться. Жаль, что это запрос и запуск. 🙂