3

イベントが発生したときに呼び出される機能を備えたボタンに onclicks をアタッチしています。ページを実行すると、クリックせずに onclick の関数が実行されます。

window.onload=function(){
var recipeCount = 0;
//gets the recipes and puts them in the menu bar #left
//places them in buttons
$.getJSON('recipes.json', function(data) {
       $.each(data.recipe, function(i, f) {
       var yep = "</br> <button type='button' id = '" + f.number + "'>" + f.Name + "</button> </br>";
       $(yep).appendTo("#left");
       recipeCount = recipeCount + 1;


     });//for each recipe

   });//getJSON
//ends recipes to menu
for(var i = 1; i < recipeCount + 1; i++){
    $(i).onclick = clicked(i);
}
$("one").onclick = clicked("one");
};//on load

function clicked(idNum){
    $.getJSON('recipes.json', function(data) {
       $.each(data.recipe, function(i, f) {
       if(idNum == f.number){
        var rec = "</br> <h1> " + f.Name + "</h1> " ;
        $(rec).appendTo("#bigBox");

       }

     });//for each recipe

   });//getJSON
}//clicked
4

3 に答える 3

2

clicked()その関数を直接呼び出して実行させているのはそのためです。

適切な構文は次のようになります。

$('#some-element').click(function(event) {
    // inside click event handler
});

つまり、次のようなものが必要になります。

$('#some-element').click(function(event) {
    clicked('one');
});

生の JavaScript スタイルを探している場合は、次のようになると思います。

$('#some-element')[0].onclick = functionName;
于 2012-11-14T16:35:08.657 に答える
1

最初$("one")は有効ではありません$(".one")。1 つが CSS クラスであるか$("#one")、1 つが要素の ID である必要があります。

次に、このようにする必要があります。

$("#one").click(function(event) {
      clicked("one");
});
于 2012-11-14T16:35:23.867 に答える
0
clicked(i)   executes the function.

関数ポインタをそれに関連付けるだけです。

$(i).onclick = clicked(i);

する必要があります

$('#'+ i).on('click' , function() {
     clicked(i);
});

しかし、GETjsonでiの値を使用しているように見えるため、これは機能しません。これは古典的な閉鎖問題です。

for(var i = 1; i < recipeCount + 1; i++){
    $('#'+ i).on('click' , function(num) {
        return function() {
                 clicked(num);
        }
    }(i)  
 );

}

于 2012-11-14T16:35:37.547 に答える