Как избежать запуска события щелчка

#jquery #jeditable

#jquery #настраиваемый

Вопрос:

У меня есть скрипт панели переключения в jQuery, посредством которого мой контент расширяется и сворачивается, когда я нажимаю на элемент h2.

Проблема в том, что у меня есть поля ввода в этом элементе h2, которые возникают, когда я пытаюсь что-то отредактировать с помощью jEditable. Я хотел бы найти способ, чтобы при нажатии на это поле ввода я не получал событие щелчка.

Я предполагаю каким-то образом использовать :not метод селектора, но я перепробовал кучу итераций безрезультатно.

код

     //toggle panel content
    $(".panelcollapsed h2").click(function(){
        $(this).siblings(".panelcontent").slideToggle(100, 'easeInQuad');
    });
  

Ответ №1:

Вы могли бы проверить, возникло ли событие на input элементе, и проигнорировать его, если это произошло:

 $(".panelcollapsed h2").click(function(e){
    if (e.target.tagName.toLowerCase() === 'input') {
        return;
    }

    $(this).siblings(".panelcontent").slideToggle(100, 'easeInQuad');
});
  

Это проверяет tagName of e.target , элемент, в котором возникло событие, чтобы увидеть, совпадает ли оно с input . Если это так, return завершите работу с обработчиком событий.

Ответ №2:

Вам нужно проверить event.target :

 //toggle panel content
$(".panelcollapsed h2").click(function(e){
    if ($(e.target).is('h2'))
       $(this).siblings(".panelcontent").slideToggle(100, 'easeInQuad');
});
  

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

1. Да, это другой способ, но он намного медленнее. Это также приведет к сбою, например, <h2><span>foo</span></h2> .

Ответ №3:

Не совсем уверен, как выглядит ваш DOM, поэтому просто снимаю в темноте. Возможно, использование e.stopPropagation() в функции щелчка ввода могло бы помочь?

Ответ №4:

при вводе внутри тега h2 вы можете добавить event.stopPropagation() на его onclick.

 $('#inputInsideH2').click(function(event){
   event.stopPropagation();
   $(this).focus();
};
  

event.stopPropagation() остановит распространение события click.