0

次のコードを考えてみましょう。理論的には、クリックイベントは各要素にバインドする必要がありますが、何らかの理由で(私にはわかりませんが)最後のリンクにのみバインドします。誰かアイデアはありますか?

$.each(data, function(i,aitem){ 
linkid = 'address'+i;                   
$("#SearchResults").html($("#SearchResults").html()+'<p><a id="'+linkid+'" href="#">'+ aitem.Address +'</a></p>');                    
$('#'+linkid).bind("click", function(){
    otherfunction(i);
    return false;
});

});

4

3 に答える 3

1

ライブクリックイベントを追加するのはどうですか?

$("a[id^=address]").live("click", function() {
    alert("ran");
    var value = $(this).attr("id").substr(7);
    myFunction(value);
    return false;
});

これらすべてのリンクにクリックイベントを追加する必要があります(:

編集:ダリンからのヒントが含まれています...

于 2009-09-03T14:14:08.900 に答える
1

試す:

var linkid = ...;
var link = $("<a></a>").attr('id', linkid).attr('href', '#').text(aItem.Address).click(function(){ alert('ran'); return false; });


$('#SearchResults').append(link.wrap("<p></p>"));

作成している各リンクにクリック イベントをバインドするという考えなので、それを作成コードの最後にチェーンし、それについて明示します。

それが役立つことを願っています。

于 2009-09-03T14:20:18.227 に答える
0

これは、クロージャーに慣れていない人によくある問題です。

正しい解決策はこれを行うことです:

$.each(data, function(i,aitem){ 

  linkid = 'address'+i;                                   
  $("#SearchResults").html($("#SearchResults").html()+'<p><a id="'+linkid+'" href="#">'+   aitem.Address +'</a></p>');                                        
  $('#'+linkid).bind("click", function(){
     (function(i){
        otherfunction(i);
        return false;
     }(i));
  });


});
于 2009-09-03T14:19:49.727 に答える