Javascript 带有onclick处理程序的元素顶部的链接

Javascript 带有onclick处理程序的元素顶部的链接,javascript,html,Javascript,Html,嘿。我遇到了一个愚蠢但棘手的问题 如果我有这种(简化的)情况: <div onclick="doSomething(); return false;"> lorem ipsum <a href="somewhere.html">dolor sit</a> amet </div> 同侧盲蝽 …是否有任何(方便的)方法可以防止在单击链接时触发父div的onclick处理程序 在我的场景中,我有一个大的包装div,它被做成一个带有oncli

嘿。我遇到了一个愚蠢但棘手的问题

如果我有这种(简化的)情况:

<div onclick="doSomething(); return false;">
    lorem ipsum <a href="somewhere.html">dolor sit</a> amet
</div>

同侧盲蝽
…是否有任何(方便的)方法可以防止在单击链接时触发父div的onclick处理程序


在我的场景中,我有一个大的包装div,它被做成一个带有onclick处理程序的“link”,但我想用其中的链接覆盖一些文本数据,但至少在Firefox中,当我单击文本中的链接时,首先执行父对象的onclick。

哦,这是一个糟糕的HTML/行为嵌套。要么整个div可以作为一个元素单击,要么链接可以,但不能同时作为两个元素单击。。。除非您“取消嵌套”它们。

IMHO,这是一个糟糕的HTML/行为嵌套。要么整个div可以作为一个元素单击,要么链接可以,但不能同时作为两个元素单击。。。除非您“取消嵌套”它们。

使用jQuery,您可以向每个锚点添加一个单击处理程序,并使用它防止事件冒泡到DIV

   $('div#wrapperDiv > a').click( function(event) {
       event.stopPropagation();
   });

使用jQuery,您可以向每个锚点添加一个单击处理程序,并使用它来防止事件冒泡到DIV

   $('div#wrapperDiv > a').click( function(event) {
       event.stopPropagation();
   });

您可以通过在处理程序中测试事件的原始目标来解决这个问题。大致如下:

function doSomething ( e ) {
  // get event object and target element
  var e = e || window.event;
  var target = e.srcElement || e.target;
  // is target a div?
  if ( target && /^div$/i.test( target.nodeName ) ) {

    // do your magic in here ...

  }
}

您可以通过在处理程序中测试事件的原始目标来解决这个问题。大致如下:

function doSomething ( e ) {
  // get event object and target element
  var e = e || window.event;
  var target = e.srcElement || e.target;
  // is target a div?
  if ( target && /^div$/i.test( target.nodeName ) ) {

    // do your magic in here ...

  }
}

我认为OP认识到这一点(cf“dumb…problem”)。我认为OP认识到这一点(cf“dumb…problem”)。事件冒泡是问题-事件冒泡是问题-