1

jqueryを使用してイベントをいくつかのボタンにバインドしています...

$(".numField").bind("click", stageButtonClick());

関数stageButtonClick()では、呼び出しボタンのオブジェクトを取得したいのですが$(this)、関数内では使用できずstageButtonClick、何も返されません。

また、インライン関数の使用法を提案しないでください

$(".numField").bind("click", function() {...})

このようにする方法を学びたいと思います。

4

4 に答える 4

2

あなたの問題はここにあります:

$(".numField").bind("click", stageButtonClick());
                       don't use parenthesis ^^

名前付き関数を割り当てるときに括弧を使用しないでください。関数が呼び出され、代わりに結果が割り当てられるためです。

これは機能します:

デモ

$(document).ready(function(){

    $(".numField").bind("click", stageButtonClick);

});

function stageButtonClick()
{
     alert( $(this).attr("id") );  
}
于 2012-12-14T22:48:19.097 に答える
1

あなたは非常に非jQueryの方法で物事をやろうとしています。関数全体をインライン化したくない場合でも、次のようなことを行うことで、作業がずっと楽になります:

$(".numField").bind("click", function() {
    stageButtonClick(this); // or stageButtonClick($(this)) if you want to pass jQuery selector
});

ここでは、クリックした DOM 要素をstageButtonClick()関数に渡すだけです。

また、jQuery 1.7 以降を使用している場合は、on()代わりにbind().

于 2012-12-14T22:46:31.813 に答える
1

関数自体ではなく、関数の結果を返す$(".numField").bind("click", stageButtonClick());ため、最初は機能しませんstageButtonClick()stageButtonClick

次に、and要素eventを使用して、呼び出された関数にオブジェクトが渡されます。通常、 になります。targetcurrentTargetevent.currentTarget.numField

したがって、試してみると、通常はまたは$(".numField").bind("click", stageButtonClick);を使用できます$(this)$(event.currentTarget)

于 2012-12-14T22:49:58.767 に答える
1

その場合は、event object

$(".numField").bind("click", stageButtonClick);

function stageButtonClick(e){
   // You can just use 
         **this**
   OR
       **$(e.target)**
}

また、後者が前者.on()によって置き換えられたため、代わりに使用してイベントをバインドします。.bind()

$(".numField").on("click", stageButtonClick);
于 2012-12-14T22:52:08.070 に答える