2

クリックバインドを取得するのではなく、JavaScriptがバインドを作成する代わりにバインドのアクションをすぐに実行しているかのように、コンソールメッセージのリストを取得します。

var biomes = new Array("glacier","desert","forest","grassland","hills","jungle","mountains","ocean","plains","swamp","tundra");


function changeTerrain(biome){
  console.log(biome);
}

$(document).ready(function(){
  // fill in terrain guide
    $.each(biomes,function(x,biome){
      $('div#terrainGuide').append("<div class='tile "+biome+"'></div>");
      $('div#terrainGuide:last-child').bind({
        click: changeTerrain(biome)
      });
    });
});
4

3 に答える 3

3

一度だけバインドする必要がある場合は、追加するすべての要素に同じイベントハンドラーをバインドしているようです。

$.each(biomes,function(x,biome){
  $('div#terrainGuide').append("<div class='tile "+biome+"'></div>");
});

$('div#terrainGuide:last-child').bind({
    click: function(){
       changeTerrain(biome);
    }
});
于 2013-02-14T04:07:02.000 に答える
1

バインド呼び出しで無名関数を使用する必要があります。つまり、次のようになります。

 click: changeTerrain(biome)

になる必要があります

 click: function(){ changeTerrain(biome); }
于 2013-02-14T04:02:55.960 に答える
0

私はあなたがこれであなたが望む振る舞いをすることができると思います:

var biomes = new Array("glacier","desert","forest","grassland","hills","jungle","mountains","ocean","plains","swamp","tundra");

function changeTerrain(e){
  //gets the clicked child by calling e.target, and an small hack to get the child's biome
  console.log($(e.target).attr('class').split(' ')[1]);
}

$(document).ready(function(){
  // fill in terrain guide
    $.each(biomes,function(x,biome){
      $('div#terrainGuide').append("<div class='tile "+biome+"'>"+biome+"</div>");
    });
   //remove the bind from the loop and binds the click event to all .tile elements, which are #terrainGuide children
   $("div.tile").click(changeTerrain);
});
于 2013-02-14T04:21:39.497 に答える