jQueryを使って複数のイベントに遅延結合機能
質問
ここでのシナリオだ:私は、私がクリックしたときに対応する関数にバインドするボタンのセットを持っています。これらのボタンのIDは、対応する関数の名前と同じです。私はこれを行うことができます:
$("#kick").click(kick);
$("#push").click(push);
$("#shove").click(shove);
しかし、私は怠け者だと(私の性質であるとして)より遅延してこれを実行したいと思います。ボタンは、すべてのブロック要素に含まれているとして、私はこのような何かをしたいと思います:
$("#button_holder > span").each(function () {
var doThis = this.id;
$(this).click(doThis);
});
問題が解決しない場合を除き。任意の提案ですか?
解決
他の回答者と同じように、私はこれが(プログラマの美徳のように)「真」怠惰であることをわからないんだけど、あなただけがあなたの実装の詳細を知っています。
あなたは本当にこのような何かをしたい場合は、、あなたはあなたの特定の機能を格納するオブジェクトを使用し、それらをルックアップするために文字列を使用することができます:
var myFunction = {
kick: kick,
push: push,
shove: shove
};
$("#button_holder > span").each(function () {
var doThis = this.id;
$(this).click(myFunction[doThis]);
});
それともとして無名関数ます:
var myFunction = {
kick: function() { /*do kick */ },
push: function() { /*do push */ },
shove: function() { /*do shove */ }
};
$("#button_holder > span").each(function () {
var doThis = this.id;
$(this).click(myFunction[doThis]);
});
他のヒント
$("#button_holder > span").each(function () {
var doThis = this.id;
$(this).click(function(doThis){
alert(doThis);
});
});
<input type="submit" id="kick" value="Kick Me">
<input type="submit" id="push" value="Push Me">
<script type="text/javascript>
$(function() {
$("input[type=submit]").each(function () {
var doThis = this.id;
$(this).click(doThis);
});
});
</script>
私はこの点を見ていないと思います。とにかく、個別に各関数を作成する必要があり、他は通常、完全に理解するために、プログラミングのこの種のは困難です。たぶん、あなたはボタンの数十を持って、それは使い捨てのコードだと、私は理解できますが...おそらくない...
なぜちょうど??単一の関数にすべてを結合して、イベント時にthis.idに基づいて決意をしない
その非常にシンプル! あなたは、クリックメソッドになし-関数を渡すしようとします。
var doThis = this.id;
$(this).click(doThis);
あなたが関数を渡す必要があります:
$(this).click(function(doThis){
alert(doThis);
});
または
function myFunc(){};
$(this).click(myFunc);
所属していません StackOverflow