【问题标题】:html div onclick eventhtml div onclick 事件
【发布时间】:2013-10-29 10:39:21
【问题描述】:

我的jsp页面上有一个html div,我在上面放了一个锚标签,请在下面找到代码,

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

js代码

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

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

在这里,当我单击 div 时,我收到了 123 消息的警报,这很好,但是当我单击 ABC 时,我想要消息,我想打电话给 @987654327 @方法。

JSFiddle

我的代码有什么问题?请帮帮我。

【问题讨论】:

标签: javascript jquery html onclick


【解决方案1】:

问题是单击锚点仍会触发您的&lt;div&gt; 中的单击。那就是“event bubbling”。

其实有多种解决方案:

  • 在 DIV 单击事件处理程序中检查实际目标元素是否为锚点
    → 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 作为其 ID。

我假设您想抑制锚点的事件。这不能以这种方式工作,因为两个选择器(你的和我的)都选择了完全相同的 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 的 id。

        $('.expandable-panel-heading:not(#ancherComplaint)').click(function () {
        markActiveLink();    
             alert('123');
         });
        
        function markActiveLink(el) {   
        var el = $('a').attr("id")
            alert(el);
        } 
        

        Demo

        【讨论】:

        • 单击 DIV 中的任意位置会导致显示两个 alert()。
        【解决方案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】:

            试试这个例子,仍然从你的 HTML 调用 onclick,并且事件冒泡停止。

            <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 函数放入调用点击事件的就绪函数中:

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

              【讨论】:

                【解决方案9】:

                当点击 div 提示键时

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-09-16
                  • 2014-04-04
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多