1

以下の関数は、ページの準備ができたときに呼び出され、さまざまなアンカー リンクのクリックを模倣し、それらのアンカーのバインドされたメソッドをトリガーして、同じリンクを手動でクリックすることで構成される同じ 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 番目のトリガーが呼び出された時点で最初のトリガーが完全に完了していないことを示唆しています。私はこれが事実だとは思わなかったでしょう-または私のコードはどういうわけか複数のスレッドで実行されていますか?

要するに、トリガーとそのメソッドが完全に同期して実行されていることを誰かに確認してもらう必要があるため、間違った場所でバグを探しているかどうかがわかります。よろしくお願いします。

4

1 に答える 1

0

たぶんこのようなものがうまくいくでしょう(私は試しませんでした):

$('.links a[href="/' + anchor.split('/')[0] + '/"]').click(function (){
  var s = '.links a[href="/' + anchor.split('/')[0] + '/' + 
          anchor.split('/')[1] + '/"]';
  $(s).click();
}).click();
于 2009-11-27T03:26:02.517 に答える