#javascript #jquery
#javascript #jquery
Вопрос:
Я пытаюсь создать ссылку, которая при наведении курсора исчезает в неупорядоченном списке, когда вы нажимаете на элемент списка в неупорядоченном списке, ul должен исчезнуть. На данный момент у меня возникли проблемы с разработкой того, как это можно сделать. Если кто-нибудь может объяснить мне, где я ошибаюсь, или у него есть какие-либо полезные советы о том, как я могу улучшить свой код, это было бы здорово.
Код здесь:http://jsfiddle.net/kyllle/W8AL5 /
Javascript
$(document).ready(function() {
$('#container li.hover').hover(function() {
$(this).find('ul.countries').fadeToggle(200);
});
$('ul.countries a').click(function() {
$('this').find('ul.countries').fadeOut(200);
});
});
Комментарии:
1. Все
ul
должно полностью исчезнуть? Илиul
должно исчезнуть, оставив щелчокli
позади?2. @David Thomas весь ul должен исчезнуть
Ответ №1:
Ваш код на самом деле не так уж далеко. Всего пара проблем:
$('this')
не работает. Вам нужно$(this)
.this
Ключевое слово указывает на элемент, на который был сделан щелчок..find('ul.countries')
—find
работает с элементами-потомками.ul
Вам нужен родительский элемент. Метод, который вы хотите, этоclosest
- Если вы хотите, чтобы пользователь оставался на той же странице, а не переходил по ссылке, вам следует использовать
event.preventDefault
.
Итак, в общей сложности:
$(document).ready(function() {
$('#container li.hover').hover(function() {
$(this).find('ul.countries').fadeToggle(200);
});
$('ul.countries a').click(function(e) {
e.preventDefault();
$(this).closest('ul.countries').fadeOut(200);
});
});
Комментарии:
1. спасибо, я пытаюсь изучить jQuery, и существует так много методов, что я просто не уверен, какие из них использовать! Я пробовал ваш код, при нажатии на ссылку ul исчезает, но при перемещении мыши из области исчезнувшего ul начинается эффект мерцания?
2. @kyllle, который вам нужно добавить
.stop(true, true)
. Смотрите обновление .
Ответ №2:
find — неправильный выбор в вашей ситуации здесь. Он выполняет поиск только по потомкам элемента jQuery, и в этом случае ‘this’ всегда будет дочерним элементом ul, который вы пытаетесь получить. смотрите больше на find
вы можете запросить ul напрямую, если хотите:
$('ul.countries').fadeToggle(200);
$('ul.countries').fadeOut(200);