如何在jQuery中停止自定义事件冒泡?
例如,我有这个代码:
$('.myclass').bind('amodaldestroy', function(){
    ....does something.....
})
我怎么只允许在冒泡时找到的第一个元素上触发一次?我可以添加退货false吗?
$('.myclass').bind('amodaldestroy', function(){
     ....does something.....
    return false;
})
我想通过单击其中的关闭链接或通过单击该div之外的任何位置来隐藏div.
我正在尝试关注代码,它通过正确单击关闭链接打开并关闭div,但如果我有问题通过单击div之外的任何位置关闭它.
$(".link").click(function() {
  $(".popup").fadeIn(300);
}
);
$('.close').click(function() {
  $(".popup").fadeOut(300);
}
);
$('body').click(function() {
  if (!$(this.target).is('.popup')) {
    $(".popup").hide();
  }
}
);<div class="box">
  <a href="#" class="link">Open</a>
  <div class="popup">
    Hello world
    <a class="close" href="#">Close</a>
  </div>
</div>我有javascript,人们在他们的页面中包括.在我的javascript中,我有一个jQuery版本(1.8为了方便参考),它被划分为自己的命名空间,并通过全局变量引用(但不是"$"或"jQuery"的两个默认变量之一) .这允许用户在他们的页面中使用jQuery并且不会干扰我在函数内部执行的操作.
所以我们有一个页面已经有jQuery(1.4),并且一切正常,除了用户和我的代码都在元素上监听"点击"事件,他们的第一个,所以在他们这样做的少数事件上return false,jQuery停止传播,我的事件永远不会被触发.我需要先举办活动.用户希望我的onClick功能仍然有效.
现在我知道jQuery在内部通过_data()对象保持自己的事件顺序,通过它可以取消绑定现有事件,绑定我的事件,然后重新绑定现有事件,但这只适用于通过该实例绑定的对象的jQuery.我宁愿不盲目地寻找jQuery对象,希望冲突是由用户自己的jQuery版本引入的.毕竟当用户不通过jQuery绑定事件时会发生什么?试图操纵页面中现有的jQuery对象不是一个好的解决方案.
我知道,根据浏览器,他们使用addEventListener/removeEventListener或attachEvent/detachEvent.如果我只能获得已添加事件的列表,我可以按照我想要的顺序重新绑定它们,但我无法找到方法.通过chrome检查来查看DOM我看不到任何地方的onclick绑定(不在对象上,也不在窗口或文档上).
我正试着弄清楚jQuery绑定其监听的确切位置.为了能够控制自己事件的顺序,jQuery必须全面地听某个地方,然后开启它自己的功能吗?如果我能弄明白在哪,我可以深入了解如何确保我的活动始终是第一位的.或者也许有一些我在谷歌上找不到的JavaScript API.
有什么建议?
我有以下HTML代码:
<div class="outerElement">
    <div class="text">
     Lorem ipsum dolar sit amet
    </div>
    <div class="attachment">
      <!-- Image from youtube video here -->
    </div>
</div>
我在".outerElement"上有一个jQuery onclick事件但是,当我点击附件时,我不希望调用".outerElement"onclick事件,是否有某种方法可以防止这种情况或检查哪个元素被点击?
在这个例子中,我希望在单击黑色外部div时触发警报,而不是在单击内部div中的任何内容时触发警报.
目前,当我单击内部按钮时,它会触发警报.
$("#outer").click(function() {
  alert("triggered");
});#outer{
  position: absolute;
  width: 100%;
  height: 100%;
  background-color: #000;
  display: flex;
  justify-content: center;
  align-items: center;
}
#inner{
  background-color: #fff;
width: 300px;
height: 300px;
  text-align: center;
}<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="outer">
  <div id="inner">
    <button>inner button</button>
  </div>
</div>我想在内部div中没有任何东西可以触发警报.我该怎么做呢?
(由于某种原因,内部按钮没有显示在代码段中,这里是codepen链接:https://codepen.io/GuerrillaCoder/pen/Pmvmqx )
我试图做的一个很好的例子是,想想intragram。当您单击照片时,它会打开一个带有该照片和灰色背景的窗口。如果您单击灰色背景中的任意位置,图片将关闭,但是如果您单击图片,图片将保留在窗口中。
这就是我试图通过此实现的目标:
<div class="overlay_display_production_list_background" id="overlay_display_production_list_background_id" onclick="this.style.display = 'none'">
    <table class="table_production_availability" id="table_production_availability_id" onclick="this.parentElement.style.display = 'block'">
    </table>
</div>
然而这不起作用。我如何让它工作,我只想要纯 java 脚本。
谢谢
说我有以下HTML:
<div>
  <span>span text</span> div text <span>some more text</span>
</div>
我想这样做,以便当我单击span时将触发一些事件(例如,使文本变为粗体),这很容易:
$('span').click( ... )
但是现在当我单击远离元素时,我希望触发另一个事件(例如,使文本变为正常粗细)。我需要以某种方式检测不在span元素内的单击。这与blur()事件非常相似,但是对于非INPUT元素。我不介意此点击是否仅在DIV元素内部而非页面的整个主体内检测到,顺便说一句。
我试图通过以下方法在非SPAN元素中触发事件:
$('div').click( ... ) // triggers in the span element
$('div').not('span').click( ... ) // still triggers in the span element
$('div').add('span').click( ... ) // triggers first from span, then div
另一种解决方案是在click事件中读取事件的目标。这是以这种方式实现的示例:
$('div').click(function(e) {
  if (e.target.nodeName != "span")
     ...
});
我想知道是否还有更优雅的解决方案,例如blur()。
我对eventlistener概念有疑问.在真假部分我怀疑的两个代码之间有什么区别.当我用练习代码中的第二个代码替换第一个代码时,没有发生变化.
a.addEventListener("click", modifyText, true);
a.addEventListener("click", modifyText, false);
mainDiv()当我单击 mainDiv 时,将调用该函数,当我单击 subDiv 时,将调用mainDiv()和函数。subDiv()
我只想subDiv()在单击 subDiv 时调用该函数。我怎样才能实现这个目标?
代码:
<div onclick="mainDiv()">
  show main div
  <div onclick="subDiv()">
    show sub div
  </div>
</div>
<script type="text/javascript">
  function  mainDiv(){
    alert("main div is clicked");
  }
  function  subDiv(){
    alert("sub div is clicked");
  }
</script>
以以下代码为例:
<div id="parent">
  <div id="child">info goes here</div>
</div>
//javascript
function something{
//do something;}
//initial attempt
document.getElementById('parent').addEventListener('click',something);
//event capture
document.getElementById('parent').addEventListener('click',something,true);
当我单击父元素时,我希望它执行某些操作,而当我单击子元素时,我希望它不执行任何操作。问题是,当我单击子元素时,它会触发“某些内容”。我认为这可能是事件冒泡,这样如果我单击子元素,事件就会从那里冒泡到父元素。于是我就想到了事件捕获,但这也导致了这个问题。
任何有关如何实现这一目标的意见或建议将不胜感激。