关于 jQuery 触发 click 事件有个疑问 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iuhux

关于 jQuery 触发 click 事件有个疑问

  •  
  •   iuhux 2014 年 7 月 17 日 4878 次点击
    这是一个创建于 4300 天前的主题,其中的信息可能已经有所发展或是发生改变。
    当我在触发一个a标签的click事件时,没有发生URL跳转。这是为什么呢?
    代码在此: http://jsfiddle.net/iuhux/xfu4N/
    14 条回复    2014-07-17 22:07:51 +08:00
    Tonni
        1
    Tonni  
       2014 年 7 月 17 日
    ```
    <a href="htp://www.baidu.com" id="b">b</a>
    ```
    Tonni
        2
    Tonni  
       2014 年 7 月 17 日
    scarlex
        3
    scarlex  
       2014 年 7 月 17 日
    ```
    $("#a").click(function() {
    $("#b")[0].click();
    })
    ```
    Tonni
        4
    Tonni  
       2014 年 7 月 17 日
    哦,不好意识看错问题了,浏览器不允许JS触发链接实现跳转,不过可以hack,你在标签里面嵌套一个span,下面触发span的click事件,事件冒泡到父标签a链接时会出发a的click事件,从而实现页面跳转,另外你的代码里面a链接地址是不对的,参考1楼和2楼我给出的回答,修改完后的代码是这样的:
    http://jsfiddle.net/KtQQY/
    iuhux
        5
    iuhux  
    OP
       2014 年 7 月 17 日
    @scarlex 哦,这个我知道可以。我就是想知道那个为什么不可以
    Tonni
        6
    Tonni  
       2014 年 7 月 17 日   1
    这事StackOverflow上的讨论: http://stackoverflow.com/a/21334234
    iuhux
        7
    iuhux  
    OP
       2014 年 7 月 17 日
    @Tonni 谢谢
    Tonni
        8
    Tonni  
       2014 年 7 月 17 日
    试了下3楼的回答,发现我4楼的回答是不确切的。
    txlty
        9
    txlty  
       2014 年 7 月 17 日
    $("#b").click(function(e) {
    console.log(e)
    })
    $("#a").click(function() {
    var e = document.createEvent('MouseEvent');
    e.initEvent('click', false, false);
    document.querySelector("#b").dispatchEvent(e);
    })
    scarlex
        10
    scarlex  
       2014 年 7 月 17 日   2
    @Tonni
    @luhux

    $('#b') 返回的是 jQuery element,而 $('#b')[0] 返回的是 HTML element。
    在 jQuery element 上面调用 click 是对该对象进行事件绑定,不过按照官方说法,$('#b').click() 也是 $('#b').trigger('click') 的简写。但作用在 <a> 标签上的时候会把 href 属性忽略掉。而在 HTML element 上面调用 click 才会真正跳转。


    另一种写法是直接在 click 函数中进行跳转:

    $("#b").click(function(e) {
    ----var href = $(this).attr('href');
    ----location.href = href;
    });

    $("#a").click(function() {
    ----$("#b").click();
    })


    参考资料:
    https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.click
    http://api.jquery.com/click/
    Biwood
        11
    Biwood  
       2014 年 7 月 17 日
    这个有点意思,用原生Javascript写这个函数没有任何问题,用jQuery却阻止了连接跳转事件
    Tonni
        12
    Tonni  
       2014 年 7 月 17 日 via Android
    @scarlex 嗯,我之前都是用事件冒泡的方式触发的,受教了。
    Biwood
        13
    Biwood  
       2014 年 7 月 17 日   2
    直接看了一下未编译版的jQuery源码,这里是click()的定义:

    click: {
    // For checkbox, fire native event so checked state will be right
    trigger: function() {
    if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
    this.click();
    return false;
    }
    },

    // For cross-browser consistency, don't fire native .click() on links
    _default: function( event ) {
    return jQuery.nodeName( event.target, "a" );
    }
    }

    注释里面有一句“For cross-browser consistency, don't fire native .click() on links”,大意是“为了兼容多个浏览器,不触发链接上原生的click()事件”。这应该是jQuery为了增强其兼容性而做出的妥协吧。
    chemzqm
        14
    chemzqm  
       2014 年 7 月 17 日
    你想跳网页 location.href = url 不就行了,没必要这么搞吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2825 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 86ms UTC 13:26 PVG 21:26 LAX 06:26 JFK 09:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86