Html div onclick событие

У меня есть один html div на моей странице jsp, на котором я поставил один якорный тег, для этого найдите код ниже,

<div class="expandable-panel-heading">
     <h2>
         <a id="ancherComplaint" href="#addComplaint" 
                            onclick="markActiveLink(this);">ABC</a>
     </h2>
</div>

js code

$('.expandable-panel-heading:not(#ancherComplaint)').click(function () {
     alert('123');
 });

function markActiveLink(el) {   
    alert($(el).attr("id"));
} 

здесь, когда я нажимаю на div, я получил сообщение с сообщением 123, его прекрасно, но когда я нажимаю ABC, я хочу, чтобы сообщение, которое я хочу вызвать markActiveLink.

JSFiddle

что не так с моим кодом? пожалуйста, помогите мне.

Ответы

Ответ 1

Проблема заключалась в том, что нажатие на якорь по-прежнему вызывало щелчок в <div>. Это называется событие барботажа.

На самом деле существует несколько решений:

  • Проверка в обработчике событий DIV click, был ли фактический целевой элемент привязанным
    → jsFiddle

    $('.expandable-panel-heading').click(function (evt) {
        if (evt.target.tagName != "A") {
            alert('123');
        }
    
        // Also possible if conditions:
        // - evt.target.id != "ancherComplaint"
        // - !$(evt.target).is("#ancherComplaint")
    });
    
    $("#ancherComplaint").click(function () {
        alert($(this).attr("id"));
    });
    
  • Остановка распространения события из прослушивателя кликов привязки
    → jsFiddle

    $("#ancherComplaint").click(function (evt) {
        evt.stopPropagation();
        alert($(this).attr("id"));
    });
    


Как вы могли заметить, я удалил следующую селекторную часть из моих примеров:
:not(#ancherComplaint)

Это не нужно, потому что нет элемента с классом .expandable-panel-heading, который также имеет #ancherComplaint как свой идентификатор.

Я предполагаю, что вы хотите подавить событие для привязки. Это не может работать таким образом, потому что оба селектора (ваш и мой) выбирают тот же самый DIV. Селектор не влияет на слушателя при его вызове; он устанавливает только список элементов, к которым должны быть зарегистрированы слушатели. Поскольку этот список в обеих версиях одинаковый, разницы нет.

Ответ 2

Попробуйте это

$('.expandable-panel-heading:not(#ancherComplaint)').click(function () {
    alert('123');
});

$('#ancherComplaint').click(function (event) {
    alert($(this).attr("id"));
    event.stopPropagation()
})

DEMO

Ответ 3

Попробуйте следующее:

$('.expandable-panel-heading').click(function (e) {
        if(e.target.nodeName == 'A'){
            markActiveLink(e.target)
            return; 
        }else{
            alert('123');
        }
 });

function markActiveLink(el) {   
    alert($(el).attr("id"));
} 

Вот рабочая демонстрация: http://jsfiddle.net/JVrNc/4/

Ответ 4

Измените код jQuery на это. Он будет предупреждать идентификатор a.

$('.expandable-panel-heading:not(#ancherComplaint)').click(function () {
markActiveLink();    
     alert('123');
 });

function markActiveLink(el) {   
var el = $('a').attr("id")
    alert(el);
} 

Демо

Ответ 5

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

Протестируйте клик по div и исследуйте цель

Live Demo

$(".expandable-panel-heading").on("click",function (e) {
    if (e.target.id =="ancherComplaint") { // or test the tag
        e.preventDefault(); // or e.stopPropagation()
        markActiveLink(e.target);
    }    
    else alert('123');
});
function markActiveLink(el) {   
    alert(el.id);
} 

Ответ 6

Я бы использовал stopPropagation следующим образом:

$('.expandable-panel-heading:not(#ancherComplaint)').click(function () {
     alert('123');
 });

$('#ancherComplaint').on('click',function(e){
    e.stopPropagation();
    alert('hiiiiiiiiii');
});

Ответ 7

Попробуйте этот пример, onclick по-прежнему вызывается из вашего HTML-кода, и барботирование событий прекращается.

<div class="expandable-panel-heading">
<h2>
  <a id="ancherComplaint" href="#addComplaint" onclick="markActiveLink(this);event.stopPropagation();">ABC</a>
</h2>
</div>

http://jsfiddle.net/NXML7/1/

Ответ 8

поместите функцию jquery внутри готовой функции для события click click:

$(document).ready(function() {

  $("#ancherComplaint").click(function () {
     alert($(this).attr("id"));
  });

});

Ответ 9

когда нажимают на клавишу предупреждения div

   $(document).delegate(".searchbtn", "click", function() {
        var key=$.trim($('#txtkey').val());
        alert(key);
        });

Ответ 10

У меня проблема, я хочу через onclick на div или закрывать меня, будет другой, но я не поймаю onclick. Под кодом в javascript:

<script type="text/javascript">
        function ocultar(){
        document.getElementById('ver').style.display = 'none';}
   </script>

и, как я его называю, из div

<div class="divCierre" onclick="ocultar()"></div>