#javascript #jquery
#javascript #jquery
Вопрос:
Кто-нибудь может мне это объяснить? Я пытаюсь точно понять, почему выпадающие списки внутри тега li работают нормально, но при использовании формы меню исчезает при нажатии в любом месте.
menu.find('ul li > a').bind('click', function (event) {
event.stopPropagation();
}
Он работает в сочетании с:
$("html").click(function() {
menu.find('.active').removeClass('active');
});
Полный код с примером меню:
Ответ №1:
Этот фрагмент кода
$("html").click(function() {
menu.find('.active').removeClass('active');
});
удалил бы active
класс меню и, таким образом, скрыл бы его при обнаружении щелчка в любом месте страницы.
Но
menu.find('ul li > a').bind('click', function (event) {
event.stopPropagation();});
Переопределит первый фрагмент кода при обнаружении щелчка в выпадающем списке.
Таким образом, вы можете добавить приведенный ниже код, чтобы переопределить первый фрагмент кода, чтобы он также отменял скрытие при нажатии на форму.
menu.find('ul > form').bind('click', function (event) {
event.stopPropagation();});
Ответ №2:
Вы также хотите остановить form
события, распространяющиеся на html
(вероятно, должно быть document
).
Измените селектор, чтобы также выбрать дочерние form
элементы.
Комментарии:
1. привет, спасибо за помощь, не могли бы вы уточнить, что вы подразумеваете под, вероятно, должен быть документ? И что было бы по-другому, если объединить форму и a, как вы сделали, по сравнению с разделением их, как Куинси сделал выше? Спасибо
2. @trying_hal9000: обычно я разрешаю событиям распространяться на
document
, а не наhtml
элемент, хотя в вашем примере это, вероятно, не имеет значения. Разделение их не имело бы никакого значения, просто сделайте код более подробным и нарушающим DRY.
Ответ №3:
Если вы измените первую проверку на menu.find('ul li>*')
then, похоже, это сработает. Я думаю, что эта строка обрабатывала только клики по ссылкам, а элементы вашей формы не являются ссылками.
Ответ №4:
<form>
это элемент, такой же, как и любой другой, поэтому он должен иметь право на выбор с помощью селекторов CSS (которые вызываются find()
функцией).
Вам нужно изменить свой селектор, чтобы включить <form>
тег и, возможно, изменить селектор на получение <input>
элементов вместо <a>
.
Для получения дополнительной информации о селекторах jQuery, пожалуйста, смотрите: http://api.jquery.com/category/selectors /