Я не вижу полный код здесь (усеченный и т. Д.), Но hover ожидает две функции. Это просто инкапсуляция mouseenter
и mouseleave
в одном. Вам просто нужно добавить ClassClass во входной части и removeClass в выходной части. Клик не должен иметь к этому никакого отношения, если вы действительно не ожидаете чего-то другого, если вы все еще зависаете и еще не нажали.
Переключение класса лучше для отдельных событий, таких как щелчок. У Hover всегда есть потенциал, чтобы всегда вызывать вход и выход (если только вы никогда не двигаете мышью!), Так что четко указывайте, когда класс должен быть добавлен и когда он должен быть удален.
http://jsfiddle.net/As2dF/
Д'оо, только что понял, что вы можете установить одно и то же событие как для входа, так и для выхода ... Я все равно оставлю свой ответ, так как считаю, что лучше быть явным: две функции - одна входная, а другая выходная - но Я ошибаюсь, что вам нужно поставить два.
[обновление]
Экспериментируя с одной функцией, выполняющей двойную функцию (т. Е. toggleClass
в одной функции вместо addClass
и removeClass
, и неудивительно, что невозможно воспроизвести проблему щелчка. Это наводит меня на мысль, что это либо :
Заметил, что вы не запрещаете поведение ссылок по умолчанию. Правдоподобным предположением является то, что вы зависаете (добавляете класс), щелкаете (обновляете страницу), и ваша мышь все еще находится над элементом NON-CLASSED; когда вы выходите, класс переключается. Если это проблема или даже что-то, связанное с этим, то как EXPLY о addClass
и removeClass
(вместо toggleClass
) гарантирует, что он делает то, что вы хотите. Тем не менее, если это проблема, вы можете обновить начало своей функции так, чтобы href
не срабатывал.
$("a").hover(function (e) {
e.preventDefault();
// etc
ошибка селектора (вы добавляете и удаляете два разных "уровня", которые перекрываются, в результате чего классы становятся супер вонючим
относится к # 1, ошибка всплытия событий. Хотя в конечном итоге вы, возможно, не захотите полностью прекратить распространение, посмотрите, работает ли этот эксперимент - для вашей триггерной функции передайте событие и остановите его распространение:
$("a").hover(function (e) {
e.stopImmediatePropagation();
// etc
Это может вызвать другие нежелательные побочные эффекты (может быть, другие события не запускаются, которые должны быть!), Но, по крайней мере, это поможет изолировать пузырящиеся проблемы.