私はプログラマーではありませんが、プロトタイプの作成を楽しんでいます。私の経験はすべて、actionScript2から得ています。
これが私の質問です。コードを簡素化するために、「。click」イベントをHTML本文に既に存在するdivにアタッチする方法を見つけたいと思います。
<body>
<div id="dog-selected">dog</div>
<div id="cat-selected">cat</div>
<div id="mouse-selected">mouse</div>
<div class="dog"><img></div>
<div class="cat"><img></div>
<div class="mouse"><img></div>
</body>
私の(失敗した)戦略は:
1)オブジェクトの配列を作成します。
var props = {
"dog": "false",
"cat": "true",
"mouse": "false"
};
2)「.each」で配列を反復処理し、「。click」イベントで既存の各divを拡張します。最後に、ローカル変数を作成します。
これがプロトタイプです:
$.each(props, function(key, value) {
$('#'+key+'-selected').click(function(){
var key = value;
});
});
使用できる解決策の1つは、クリックイベントハンドラーをバインドするdivに、より一般化されたクラスを割り当てることです。
例えば:
HTML:
<body>
<div id="dog" class="selected" data-selected="false">dog</div>
<div id="cat" class="selected" data-selected="true">cat</div>
<div id="mouse" class="selected" data-selected="false">mouse</div>
<div class="dog"><img/></div>
<div class="cat"><img/></div>
<div class="mouse"><img/></div>
</body>
JS:
$( ".selected" ).each(function(index) {
$(this).on("click", function(){
// For the boolean value
var boolKey = $(this).data('selected');
// For the mammal value
var mammalKey = $(this).attr('id');
});
});
.each
を使用する必要はありません。 click
はすでにすべてのdiv
のオカレンスにバインドしています。
$('div').click(function(e) {
..
});
注:.click
などのハードバインディングを使用して、動的にロードされた要素がバインドされないようにします。