13-js基础-阻止冒泡和阻止默认事件

186 阅读2分钟

如何阻止冒泡与默认行为

答案:

  • 阻止冒泡行为:非 IE 浏览器 stopPropagation(),IE 浏览器 window.event.cancelBubble = true
  • 阻止默认行为:非 IE 浏览器 preventDefault(),IE 浏览器 window.event.returnValue = false

解析:

当需要阻止冒泡行为时,可以使用

function stopBubble(e) {
  //如果提供了事件对象,则这是一个非IE浏览器
  if (e && e.stopPropagation)
    //因此它支持W3C的stopPropagation()方法
    e.stopPropagation();
  //否则,我们需要使用IE的方式来取消事件冒泡
  else window.event.cancelBubble = true;
}

当需要阻止默认行为时,可以使用

//阻止浏览器的默认行为
function stopDefault(e) {
  //阻止默认浏览器动作(W3C)
  if (e && e.preventDefault) e.preventDefault();
  //IE中阻止函数器默认动作的方式
  else window.event.returnValue = false;
  return false;
}

IE 与火狐的事件机制有什么区别?如何阻止冒泡

答案:

  1. 我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为。
  2. 事件处理机制:IE 是事件冒泡、火狐是 事件捕获;
  3. ev.stopPropagation();

target 和 currentTarget 区别

答案:

  • event.target(发生事件的元素,用于事件委托) 返回触发事件的元素(即具体点击的对象,可能是target的任意子元素)
  • event.currentTarget(绑定事件监听的那个对象,例如ul.onclik,即该对象就是ul) 返回绑定事件的元素(即方法直接dom对象,即方法是绑在哪个dom上的就是哪个dom)

事件代理参考

window.onload = function(){
  var oUl = document.getElementById("ul1");
  oUl.onclick = function(ev){
    var ev = ev || window.event;
    var target = ev.target || ev.srcElement;
    if(target.nodeName.toLowerCase() == 'li'){
            alert(123);
         alert(target.innerHTML);
    }
  }
}

如何阻止事件冒泡和默认事件?

答案:

阻止浏览器的默认行为 window.event?window.event.returnValue=false:e.preventDefault();

停止事件冒泡 window.event?window.event.cancelBubble=true:e.stopPropagation(); 原生 JavaScript 中,return false;只阻止默认行为,不阻止冒泡,jQuery 中的 return false;既阻止默认行为,又阻止冒泡