1


0

jQueryを使用してイベントトリガーとバインドされたメソッドを同期的に実行するにはどうすればよいですか?

以下の関数は、ページの準備ができたときに呼び出され、さまざまなアンカーリンクを介したクリックを模倣し、同じリンクを手動でクリックすることで設定されるのと同じ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();
    }
}

2つのイベントトリガーのうち、最初のトリガーはバインドされたメソッドを正常に実行します。 ただし、2番目のイベントトリガーのターゲットアンカーは、2番目のイベントのターゲットアンカーをDOMに挿入するため、最初のイベントのメソッドが完了するまで存在しません。 2番目のトリガーは失敗します。私の唯一の推測は、ターゲットアンカーが見つからないためであり、2番目のトリガーが呼び出された時点で最初のトリガーが完全に完了していないことを示唆しています。 私はこれが事実だとは思わなかったでしょうか、それとも私のコードはどういうわけか複数のスレッドで実行されていますか?

要するに、トリガーとそのメソッドが完全に同期的に実行されることを確認するために誰かが必要なので、間違った場所でバグを探しているかどうかがわかります。 事前に感謝します。

1 Answer


0


たぶん、このようなものが機能するでしょう(私は試しませんでした):

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