用纯CSS停止冒泡和阻止浏览器默认行为及事件响应,达到禁用(disable)的目的


发布者 ourjs  发布时间 1470191486193
关键字 编程技巧  前端 
JavaScript有一个preventDefault方法, 他可用以来取消事件的默认动作。比如取消打开链接,选择文本或拖放等。

event.preventDefault()
该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)。例如,如果 type 属性是 "submit",在事件传播的任意阶段可以调用任意的事件句柄,通过调用该方法,可以阻止提交表单。注意,如果 Event 对象的 cancelable 属性是 fasle,那么就没有默认动作,或者不能阻止默认动作。无论哪种情况,调用该方法都没有作用。

这种方法可以阻止当前元素的浏览器默认行为,但并不阻止事件被父级及document响应。如果想彻底取消事件,则可使用stopPropagation

event.stopPropagation()


该方法将停止事件的传播,阻止它被分派到其他 Document 节点。在事件传播的任何阶段都可以调用它。注意,虽然该方法不能阻止同一个 Document 节点上的其他事件句柄被调用,但是它可以阻止把事件分派到其他节点。


这两种是在JS中的常用取消事件的方法,但是其实还有一种用纯css就能实现取消事件响应的方法,pointer-events,使用起来更加简单,它可以:

1 阻止用户的点击动作产生任何效果

2 阻止缺省鼠标指针的显示

3 阻止CSS里的hover和active状态的变化触发事件

4 阻止JavaScript点击动作触发的事件


比如以下CSS就顺起到将禁用的按钮灰掉的效果

.disabled {
    pointer-events: none;
    cursor: default;
    opacity: 0.6;
}


这种方法明显比js代码更加灵活,可惜ie9不支持。详细的浏览器支持可查看这个表格








回复 (3)
  • #
  • #1 皮习关 1471421670393

    默认事件可以保留吗? 比如input

  • #2 郭异右 1475051248101

    兼容性是一方面。 其次,这个pointer-events: none; 的实际效果是该dom元素不接收鼠标事件了,也就意味着hover, cursor都会失效, 且点击事件会穿透到下层, 与disable有很大的不同。

  • #3 QQ692950235 1511247578131

    需要做一款彩票类APP马甲包上架到安卓苹果市场 我们需要做安卓ios彩票类型APP套壳上架,我们的需求 logo、应用名称、标题、介绍图、关键词、描述需要用我的。对接极光推送消息功能(注苹果上架成功的APP必须兼容ios7.0版本或者8.0上架成功的APP必须显示我们指定网址内容)提供开发者账号,量大 联系方式:372630243

微信扫码 立即评论