Проблема с событием щелчка jQuery

#javascript #jquery #events #dynamic #click

#javascript #jquery #Мероприятия #динамический #нажмите

Вопрос:

Привет, недавно я задал вопрос относительно таргетинга на динамически создаваемые ссылки, и кто-то любезно предоставил мне рабочий ответ, однако, изучив его более подробно, функциональность, которая мне нужна, немного отличается.

Следующий код переключает выделенный класс на абзац, который соответствует ссылке, создаваемой отдельной функцией. это основано на 3 событиях мыши:

 $("#hi-4").live("mouseover mouseleave click", function(){
    $("p#p-4").toggleClass("highlighted");
});
  

Это отлично работает, однако я бы хотел, чтобы выделенный класс оставался при нажатии на соответствующую ссылку (до тех пор, пока не будет нажата другая ссылка). В настоящее время он переключается для каждого перечисленного события и не остается выделенным при нажатии. Я пытался создавать отдельные функции для каждого события и пробовал использовать .addClass , .removeClass ` в разных комбинациях для каждого события, но я не могу заставить его оставаться выделенным только при нажатии. большое спасибо

Редактировать:

Вот ссылка на jsfiddle http://jsfiddle.net/RVYnb/6 к примеру, спасибо

Ответ №1:

Вы имеете в виду, что хотите, чтобы подсветка оставалась включенной до тех пор, пока пользователь не нажмет что-то еще?

Подобное поведение? :http://jsfiddle.net/QLEHY/1

 <a href='#'>Para 1</a>
<a href='#'>Para 2</a>
<a href='#'>Para 3</a>

<p>Some text. Some text. Some text. Some text. Some text. </p>
<p>Some text. Some text. Some text. Some text. Some text. </p>
<p>Some text. Some text. Some text. Some text. Some text. </p>


$('a').click(function(){
   $('p.active').removeClass('active');
   $('p') .eq($(this).index()).addClass('active');
});
  

В контексте вашего кода простое удаление класса перед его применением должно быть в порядке.

 $("#hi-4").live("mouseover mouseleave click", function(){
    $('p.highlighted').remove(); //remove all the highlighted classes. 
    $("p#p-4").toggleClass("highlighted");
});
  

Комментарии:

1. Спасибо за ответ, это именно та функциональность, которую я ищу (плюс эффект наведения курсора мыши), этот код, к сожалению, не работает. Абзац не остается выделенным в соответствии с вашим примером, также, если вы выполняете повторный запуск более одного раза, событие не запускается должным образом. есть другие идеи? Спасибо

2. @tcnarss Немного сложно сказать без вашего HTML. Можете ли вы опубликовать свою упрощенную разметку на fiddle и разместить ссылку здесь?

3. Прошу прощения, вот ссылка на пример, она максимально упрощена, как вы можете видеть (в абзаце # p-2), что события наведения курсора мыши и mouseleave работают нормально, но событие щелчка, похоже, неправильно добавляет класс.. любая помощь была бы очень признательна, она не давала мне покоя весь день

4. @tcnarss Это то, что вы ищете? : jsfiddle.net/RVYnb/37 Привязка события в этом коде работала только с одним элементом.

5. это отлично работает, спасибо за вашу помощь. я заметил, что в подключаемом модуле было много инструкций return false; . итак, событие щелчка было уничтожено.

Ответ №2:

Вы, вероятно, хотите что-то вроде этого:

 $("#hi-4").live("mouseover mouseleave", function(){
    if(!$("p#p-4").hasClass("clicked")) {
        $("p#p-4").toggleClass("highlighted");
    }
});

$("#hi-4").live("click", function() {
    $("p#p-4").addClass("clicked").addClass("highlighted");
});

$("a:not(#hi-4)").live("click", function() {
    $("p#p-4").removeClass("clicked").removeClass("highlighted");    
});
  

пример jsfiddle

Комментарии:

1. Это кажется правильным решением, и оно работает для событий наведения курсора мыши / выхода, но событие щелчка по-прежнему не работает. ссылка с идентификатором ‘#hi-4’ создается отдельной функцией, и у меня создалось впечатление, что . оперативный метод решил бы это, кажется, все работает, за исключением события щелчка. сложно опубликовать полный пример, поскольку ссылки представляют собой динамически создаваемые миниатюры из слайдера изображений.

2. РЕДАКТИРОВАТЬ: ваш пример работает отлично, хотя после просмотра моего кода при нажатии на ссылку кажется, что выбранный класс не применяется.

3. Также я использую jQ 1.4.4, может ли это потенциально быть проблемой

4. хм, jQ 1.4.4 не должен быть проблемой. Я обновил jsfiddle, чтобы #hi-4 можно было добавлять динамически.