2011-06-27 1 views
1

次のコードでは、プロジェクトのリストをレンダリングします。しかし、コードを実行すると、アラートはすべてページのロード時に一度に表示され、リストアイテムがクリックされると表示されません。私は間違って何をしていますか?jQueryのアイテムをリストするためにクリックハンドラを追加すると、すぐにすべてがトリガーされます

var projects = (an array of project objects) 

jQuery.each(projects, function(index, project) { 
    jQuery("#project-list").append("<li "+classString+"><a>"+project.title+"</a></li>"); 
    jQuery("#project-list").find("li:last").click(function() { 
         alert(project.title); 
        }); 
    }); 
+1

どのようなHTMLのように見えるのですか?あなたはhttp://jsfiddle.netで少しデモを作れますか? – Neal

答えて

1

私はあなたがしようとしているもの、私の知る限りでは、ありません、以下をかき立てることができました:

var projects = [{title:'Project 1'},{title:'Project 2'}]; 

$.each(projects, function(i){ 
    $("<a/>", { href:'#', text:projects[i].title }) 
    .click(function(e){alert(projects[i].title);}) 
    .wrap("<li></li>") 
    .parent() 
    .appendTo("#project-list"); 
}); 

私は単にあなたのプロジェクトのためのオブジェクト構造に推測されたが、あなたは可能性これを修正してください。あなたのクリックがなぜ自動的に起こったのか分かりません。上記のコードサンプルでうまく動作します。おそらく、あなたがここに投稿したコードに存在しないものを呼び出す何かがあります。

オンラインデモ:http://jsbin.com/uhixac/edit

+0

これはうまくいきました.1時間前でも持続性があったとしても、以前の問題を再現することはできません。私は賢明ではありませんが、努力のおかげで... – Yarin

1

私は、中括弧の余分なペアを疑うでしょう:

(...).click(function() { 
    //... 
}()); // note the extra braces here 

これはすぐにあなたのクリックハンドラを実行し、シミュレートされたクリックをトリガする(jQuery.clickに戻り値(undefined)を渡しますClickイベントにクリックハンドラをバインドするのではなく、何もしません)。

+0

@ Tgr-努力のおかげで - それは今、何が起こったのか分かりません – Yarin

関連する問題