如何使用 jQuery 同步运行事件触发器及其绑定方法?

Posted

技术标签:

【中文标题】如何使用 jQuery 同步运行事件触发器及其绑定方法?【英文标题】:How do I run event triggers and their bound methods synchronously using jQuery? 【发布时间】:2009-11-27 03:14:25 【问题描述】:

下面的函数在页面准备就绪时调用,旨在模拟通过各种锚链接的点击,并触发这些锚的绑定方法,从而重现通过手动点击相同链接配置的相同 DOM。

function useAnchor() 
    var uri = document.location.toString();
    if (uri.match('#')) 
        var anchor = '#' + uri.split('#')[1];
        $('.links a[href="/' + anchor.split('/')[0] + '/"]').click();
        $('.links a[href="/' + anchor.split('/')[0] + '/' + anchor.split('/')[1] + '/"]').click();
    

在两个事件触发器中,第一个成功执行了绑定的方法。但是,在第一个事件的方法完成之前,第二个事件触发器的目标锚点不存在,因为它将第二个事件的目标锚点插入到 DOM 中。第二个触发器失败,我唯一的猜测是这是由于无法找到它的目标锚点,因此表明在调用第二个触发器时第一个触发器还没有完全完成。我没想到会出现这种情况——或者我的代码是否以某种方式在多个线程中运行?

简而言之,我需要有人确认触发器及其方法是完全同步执行的,所以我知道我是否在错误的地方寻找错误。非常感谢。

【问题讨论】:

【参考方案1】:

也许这样的事情会起作用(我没有尝试过):

$('.links a[href="/' + anchor.split('/')[0] + '/"]').click(function ()
  var s = '.links a[href="/' + anchor.split('/')[0] + '/' + 
          anchor.split('/')[1] + '/"]';
  $(s).click();
).click();

【讨论】:

我完全忘记了我在第一个触发器中运行了一个异步 ajax 调用,因此出现了问题!无论如何感谢您的回复。

以上是关于如何使用 jQuery 同步运行事件触发器及其绑定方法?的主要内容,如果未能解决你的问题,请参考以下文章

关于jQuery中动态生成的点击事件触发两次的讨论

AJAX||Jquery各种选择器(js笔记)

jquery中click事件的累加绑定,点击一次,执行多次

如何确定事件是不是已与 jQuery 绑定 [重复]

jquery的自定义事件通过on绑定trigger触发

jquery绑定事件on()方法