JavaScript 几个比较零碎的点 --- 阻止后续默认行为

标题是阻止后续默认行为

首先要知道什么是后续默认行为.

默认后续行为大概包括下面几种

  • 超级链接,也就是A表情点击之后的跳转.
  • submit 按钮点击之后的表单提交.

好了,我就只知道这两个比较常用的.其他的不清楚.

接着,我们需要知道为什么要阻止后续默认行为?

最常见的场景是:

超级链接A标签,我们有时候会把它当成按钮来使用.点击它之后,希望不要跳转(包括段落跳转)


阻止默认后续行为的几种方式

既然我们是需要阻止后续默认行为.

那么我们肯定一般是也要绑定事件的.

比如 A 标签当按钮来使.


句柄方式事件响应函数绑定以及阻止后续默认事件

a.onclick = function () {
    // 按钮使的代码
    return false
}

这种写法,其实好处挺多的

  • 这种事件绑定的方式兼容性最好.
  • 阻止默认后续行为的方式也很简单 return false 即可.

W3C标准下的事件响应函数以及阻止后续默认行为

W3C 给事件对象提供了一个叫 preventDefault() 的方法来阻止一些后续默认行为.

a.addEventListener('click',function (e) {
    //按钮代码
    e.preventDafault()
}, false)

蛋疼的是 IE9 以及以下的版本不支持.


IE 浏览器下的(主要是IE9以及以下的版本)事件响应函数绑定以及阻止后续默认行为.

IE9以及以下浏览器,在事件对象(window.event)上提供了一个属性叫 returnValue.
把这个属性设置成 false 即可阻止后续默认行为.

a.attachEvent('onclick',function(){
    // 按钮代码
    
    var event = window.event
    event.returnValue = false
})

兼容性封装

注意,这里的封装主要是为了解决不是使用句柄式来绑定事件响应函数的阻止后续默认行为的方式.

句柄式的直接return false 即可.

// 阻止默认后续行为方法封装
function cancelDefault (e) {
    let e = e || window.event
    if (e.preventDefault) {
        e.preventDefault() // W3C标准,主流浏览器.
    } else {
        e.returnValue = true //IE9以及以下版本的老IE浏览器.
    }
}

// 添加事件兼容模式
  function addEvent(el, type, fn) {
    if (el.addEventListener) {
      el.addEventListener(type, fn)
    } else if (el.attchEvent) {
      el.attchEvent('on' + type, function () {
        fn.call(el) // 解决 <=IE9 版本以下的浏览器 attachEvent 的事件响应函数中this指向的不是el元素的问题.
      })
    } else {
      el['on' + type] = fn
    }

  }

addEvent(a,'click', function (e) {
    //按钮代码
    cancelDefault(e) // 组织后续默认行为.
})


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335