javascript 阻止冒泡和浏览器的默认行为详解

在使用javascript编程时会遇到一个问题,就是当你给html添加事件时,由于浏览器默认的为冒泡型事件触发机制,所以会触发你不想触发的事件.那么通过如下的函数可以解决这个问题。

1、阻止事件冒泡

 代码如下 复制代码

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

2、阻止默认行为

当按键后或者点击一个链接后,不希望按键或者链接执行时,可以取消返回值.即停止默认事件默认行为

2.1、阻止链接

 代码如下 复制代码

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

示例 : 点击页面的任何URL链接 不跳转。

 代码如下 复制代码

var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
    links[i].onlick = function(e) {
        alert('我不跳转,点我也没用');
        stopDefault(e);
    }
}

2.2、阻止下拉菜单

另一个阻止冒泡常见的应用就是下拉菜单的效果,点击按钮,下拉菜单显示,在点击页面任何其它部分,下拉菜单隐藏。

 代码如下 复制代码

//给document添加点击事件,点击时关闭菜单,默认情况下,点击任何元素,都会冒泡的到document
document.onclick = function(){
    b.style.display = "none";
}
 
//为点击元素显示下拉菜单的元素阻止冒泡,这样document的click事件就被阻止执行
function showMenu(e) {
    var e = window.event || e;
    b.style.display = "block";
 
    if (e.stopPropagation) {
        e.stopPropagation();
    } else {
        e.cancelBubble=true;
    }
}
 
btn.onclick=b.onclick = showMenu;

3、Jquery阻止事件冒泡
如果使用jquery库的进行绑定dom的事件,处理方式则为:

 代码如下 复制代码

$(selector).click(function(event) {
    event.stopPropagation();
    //do somethine
});

时间: 2025-01-21 06:14:59

javascript 阻止冒泡和浏览器的默认行为详解的相关文章

js事件冒泡、事件捕获和阻止默认事件详解_javascript技巧

谈起JavaScript的 事件,事件冒泡.事件捕获.阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免. 1.事件冒泡先来看一段代码: var $input = document.getElementsByTagName("input")[0]; var $div = document.getElementsByTagName("div")[0]; var $body = document.getElementsByTagName("bod

javascript单页面手势滑屏切换原理详解_javascript技巧

H5单页面手势滑屏切换是采用HTML5 触摸事件(Touch) 和 CSS3动画(Transform,Transition)来实现的,效果图如下所示,本文简单说一下其实现原理和主要思路. 1.实现原理 假设有5个页面,每个页面占屏幕100%宽,则创建一个DIV容器viewport,将其宽度(width) 设置为500%,然后将5个页面装入容器中,并让这5个页面平分整个容器,最后将容器的默认位置设置为0,overflow设置为hidden,这样屏幕就默认显示第一个页面. <div id="v

Python中的默认参数详解

  这篇文章主要介绍了Python中的默认参数详解,本文讲解了默认参数的基本原理.如何正确地使用可变参数等内容,需要的朋友可以参考下 文章的主题 不要使用可变对象作为函数的默认参数例如 list,dict,因为def是一个可执行语句,只有def执行的时候才会计算默认默认参数的值,所以使用默认参数会造成函数执行的时候一直在使用同一个对象,引起bug. 基本原理 在 Python 源码中,我们使用def来定义函数或者方法.在其他语言中,类似的东西往往只是一一个语法声明关键字,但def却是一个可执行的

JavaScript知识点总结(四)之逻辑OR运算符详解_javascript技巧

在JavaScript中,逻辑OR运算符用||表示 var bTrue = true; var bFalse = false; var bResult = bTrue || bFalse; 下面的真值表描述了逻辑AND运算符的行为: 在JavaScript中,0,"",false,null,undefined,NaN均表示false, 可以用如下的代码证明: <script type="text/javascript"> var bFalse = fal

javascript jquery对form元素的常见操作详解_javascript技巧

1.下拉框 select : 移除option $("#ID option").each(function(){ if($(this).val() == 111){ $(this).remove(); } }); 添加option $("<option value='111'>UPS Ground</option>").appendTo($("#ID")); 取得下拉选单的选取值 //取下拉選中的文本 $('#testSe

javascript设计模式之对象工厂函数与构造函数详解_基础知识

下面通过文字详解加代码分析的方式给大家分享下javascript设计模式之对象工厂函数与构造函数的相关知识. 概述使用对象字面量,或者向空对象中动态地添加新成员,是最简单易用的对象创建方法.然而,除了这两种常用的对象创建方式,JavaScript还提供了其他方法创建对象.1).使用工厂函数创建对象我们可以编写一个函数,此函数的功能就是创建对象,可将其. 概述 使用对象字面量,或者向空对象中动态地添加新成员,是最简单易用的对象创建方法. 然而,除了这两种常用的对象创建方式,JavaScript还提

JavaScript中子对象访问父对象的方式详解_javascript技巧

在传统面向对象的编程语言里,都会提供一种子类访问父类的特殊语法,引文我们在实现子类方法往往需要父类方法的额外辅助.在这种情况下,子类通常会调用父类中的同名方法,最终以便完成工作. javascript虽然没有类似上述的特殊语法,但我们可以造一个啊! function her(){}; her.prototype.name = 'Anna'; her.prototype.toString = function(){ var const = this.constructor; return cons

关于javascript原型的修改与重写(覆盖)差别详解_javascript技巧

每个JavaScript函数都有prototype属性(javascript对象没有这个属性),这个属性引用了一个对象,这个对象就是原型对象.javascript允许我们修改这个原型对象. 修改有2种方式: 方式1:在原有的原型对象上增加属性或者方法 function Person() { } Person.prototype.add = function(){ alert(this.name); }; Person.prototype.name = "aty"; var p1 = n

js 实现一些跨浏览器的事件方法详解及实例_jquery

js实现一些跨浏览器的事件方法 用JavaScript实现事件的绑定,移除,以及一些常用的事件属性的获取,时常要考虑到在不同浏览器下的兼容性,下面给出了一个跨浏览器的事件对象: var EventUtil = { on: function(element, type, handler) {/* 添加事件 */ if (element.addEventListener) { element.addEventListener(type, handler, false); } else if (ele