为了账号安全,请及时绑定邮箱和手机立即绑定

如果还没有将事件处理程序绑定到jQueryclick(),我可以调用jQueryclick()来跟随

如果还没有将事件处理程序绑定到jQueryclick(),我可以调用jQueryclick()来跟随

HUH函数 2019-07-17 14:58:56
如果还没有将事件处理程序绑定到jQueryclick(),我可以调用jQueryclick()来跟随<a>链接,或者已经单击了吗?我的JavaScript中有一个计时器,它需要模拟单击一个链接,以便在时间流逝后转到另一个页面。为此,我使用jQuery的click()功能。我用过$().trigger()和window.location而且,我可以让它像预期的那样工作在这三种情况下。我观察到一些奇怪的行为click()我想弄清楚发生了什么以及为什么。我在这个问题中所描述的一切都使用Firefox,但我也对其他浏览器会如何处理这个问题感兴趣。如果我没有用$('a').bind('click',fn)或$('a').click(fn)设置事件处理程序,然后调用$('a').click()好像什么都没做。它不为此事件调用浏览器的默认处理程序,因为浏览器不加载新页。但是,如果我首先设置了一个事件处理程序,那么它将按预期的方式工作,即使事件处理程序什么也不做。$('a').click(function(){return true;}).click();这会加载新页面,就像我自己单击了a一样。所以我的问题有两个:这是因为我在哪里做错了什么行为吗?为什么打电话click()如果我没有创建自己的处理程序,那么对默认行为不做什么?编辑:正如霍夫曼在试图复制我的结果时所确定的那样,我上面描述的结果实际上并没有发生。我不知道是什么导致了我昨天观察到的事件,但我确信今天不是我在问题中描述的那样。因此,答案是您不能在浏览器中“伪造”单击,而jQuery所做的一切就是调用您的事件处理程序。你还可以用window.location改变页面,这对我来说很好。
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

如果您查看$.click函数,我敢打赌有一个条件语句,它检查元素是否有为click事件进行之前发生。为什么不直接得到href属性并手动更改页面位置?

 window.location.href = $('a').attr('href');

编辑:这就是为什么它不点击,从trigger函数,版本1.3.2的jQuery源代码:

 // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
    if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
        event.result = false;

    // Trigger the native events (except for clicks on links)
    if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
        this.triggered = true;
        try {
            elem[ type ]();
        // prevent IE from throwing an error for some hidden elements
        } catch (e) {}
    }

在调用处理程序(如果有的话)之后,jQuery将触发对象上的一个事件。但是,只有当元素不是链接时,它才会为单击事件调用本机处理程序。我想这是出于某种原因。这应该是正确的,尽管是否定义了事件处理程序,因此我不确定为什么在您的示例中附加事件处理程序会导致本机onClick将被调用的处理程序。您将不得不执行我所做的工作,并逐步执行以查看调用它的位置。


查看完整回答
反对 回复 2019-07-17
  • 3 回答
  • 0 关注
  • 396 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信