2

私はjQueryを初めて使用するので、この質問は素朴に思えるかもしれません。しかし、ここで私を助けてください。

さまざまなタイトルで動的に多数のアンカー タグを作成し、動的すぎるアンカー タグに異なるクリック イベント ハンドラーを割り当てています。

すべてのアンカー タグは異なるタイトルで完全に作成されていますが、問題は、それらすべてのイベント ハンドラーが最後に作成されたアンカー タグのイベント ハンドラーと同じであることです。したがって、いずれかのリンクをクリックすると、最後のリンクをクリックしたときのページと同じページに移動します。

ここにコードがあります

var title;
var node;

for(var i = 0; i < nodes.length; i++){    
  node = nodes[i];
  title = node.getTitle();

  jQuery("#displayNodeDetails")
  .append(jQuery('<a></a>').attr({ href:'#' })
  .html(title).click(function(){
    EPCM.getSAPTop().LSAPI.AFPPlugin.service.navigate(node);
  }));
}

ここで「displayNodeDetails」は分割です。ループが実行されるたびに「ノード」の値が変化しているときに、すべてのリンクに同じイベント ハンドラーがある理由がわかりません。コードで「ユーザー管理者」、「システム管理者」の 4 つのリンクが作成されているため確認できます。 、「コンテンツ管理者」、および「コラボレーション」ですが、すべてのリンクは「コラボレーション」と同じページに移動します。

4

2 に答える 2

2

これは、 がnode常に最後のノードを指しているためです。

clickハンドラは、ループが終了した後に呼び出されます。そのため、node他のアンカーのハンドラー関数でも最後の要素を指します。

nodeハンドラーを作成するときに、現在の値をハンドラーに渡す必要があります。

jQuery("#displayNodeDetails").append(jQuery('').attr({href:'#'}).html(title).click((function(node){
  return function() { EPCM.getSAPTop().LSAPI.AFPPlugin.service.navigate(node); };
})(node));}

このようにして、ハンドラーは、関数呼び出しによって渡されclickた正しい関数を取得します。node

于 2012-10-21T09:14:20.523 に答える