V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
param
V2EX  ›  JavaScript

如何阻止这个 click 事件发生?

  •  
  •   param · 2017-04-01 17:50:04 +08:00 · 2988 次点击
    这是一个创建于 2824 天前的主题,其中的信息可能已经有所发展或是发生改变。

    screenshot

    stopPropagation()并不能阻止,因为它是 capture 而不是 bubble , capture 的顺序是先父后子、自上而下的。

    第 1 条附言  ·  2017-04-01 18:33:09 +08:00
    除了 remove 掉这个 listener
    第 2 条附言  ·  2017-04-01 20:42:40 +08:00
    Sorry
    标题描述有误,应该式阻止 close 事件,而不是 click 事件
    14 条回复    2017-04-02 17:14:53 +08:00
    jmyz0455
        1
    jmyz0455  
       2017-04-01 20:09:25 +08:00
    return false;
    但是不建议总是把事件设置在捕获阶段触发,然后还不能移除监听器,思路再理清一下,看能不能有别的做法。
    zhujinliang
        2
    zhujinliang  
       2017-04-01 20:14:54 +08:00 via iPhone
    做个 opacity 0.01 的东西罩在页面上面 XD
    ferrum
        3
    ferrum  
       2017-04-01 20:41:50 +08:00
    不是很明白要什么样的效果,是希望点击后能 emit 个 open 事件,但这个 click 不在其子元素上触发吗?

    至于 1L 说的 return false ,其实在 jQuery 里面才是等于 event.preventDefault() & event.stopPropagation(),但在原生的并没有什么作用。不过正常情况下真的极少会更改事件的捕获方式。

    Anyway, CSS 有个 pointer-events: none;属性,可以阻止元素响应 click 事件,或许会有用。
    param
        4
    param  
    OP
       2017-04-01 20:43:00 +08:00
    @jmyz0455 不好意思,标题描述有误,应该是阻止 close 事件,而不是 click 事件
    param
        5
    param  
    OP
       2017-04-01 20:43:33 +08:00
    @ferrum 不好意思,标题描述有误,应该是阻止 close 事件,而不是 click 事件
    lslqtz
        6
    lslqtz  
       2017-04-02 12:23:57 +08:00
    @param 很好的问题,我找了找没找到方案。
    网上说是 js 无法阻止页面关闭。
    this.close;
    function() { [native code] }

    var close='a';
    undefined

    this.close();
    VM30633:2 Uncaught TypeError: this.close is not a function(…)(anonymous function) @ VM30633:2InjectedScript._evaluateOn @ (program):878InjectedScript._evaluateAndWrap @ (program):811InjectedScript.evaluate @ (program):667

    this.close;
    "a"
    param
        7
    param  
    OP
       2017-04-02 12:29:15 +08:00
    @lslqtz 不是阻止页面关闭,是想阻止 close 函数执行
    MinonHeart
        8
    MinonHeart  
       2017-04-02 13:32:22 +08:00 via iPhone
    在 close 函数内做判断
    param
        9
    param  
    OP
       2017-04-02 13:34:55 +08:00
    @MinonHeart close 函数不是我写的,在一个第三方库里面。最好不用改库,看来唯一的方法就是移除监听器了?
    MinonHeart
        10
    MinonHeart  
       2017-04-02 13:38:17 +08:00 via iPhone
    @param 外面再包一层
    param
        11
    param  
    OP
       2017-04-02 13:38:58 +08:00
    @MinonHeart document 的外面? document 不是最外了吗?
    MinonHeart
        12
    MinonHeart  
       2017-04-02 13:42:00 +08:00 via iPhone
    @param ((((;゚Д゚))))))) 你自己包一层作为 click 事件的函数
    lslqtz
        13
    lslqtz  
       2017-04-02 17:11:00 +08:00
    @param 你把 close 改了不就好了。。
    param
        14
    param  
    OP
       2017-04-02 17:14:53 +08:00
    @lslqtz 因为 close 是在第三方库里,所以最好不用改。但现在貌似没有好的方案了,只能移除监听器或者改库。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5280 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:52 · PVG 13:52 · LAX 21:52 · JFK 00:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.