0

私は「自己学習愛好家」なので、ここでいくつかの基本的な質問をします。変数のスコープは理解できましたが、ここで .each メソッドでは機能するのにクリックでは機能しない理由が明確ではありません。私がやりたいことは、要素をクリックして、その値/テキスト/属性をクリック機能以外の場所で使用することだけです。

$(document).ready(function() {

    abc = "";
    gsd = "";

    $("p").each(function() {

        if($(this).text() === "5") {
         abc = $(this).text();
         alert(abc);
        }
        })


    $("p").on("click", function() { 
         var gsd = $(this).text();
         //alert("this is abc: " + abc);
    })

 alert("this is from the each function" + abc);// this works
 alert("this is from the click function" + gsd); // this doesn't





})
4

5 に答える 5

0

.each() acts similar to a regular for loop. It follows the flow of the program. The .on('click') event handler, on the other hand, is attached to an event. The callback will be called only when the event is fired. It doesn't fire just because you attached it.

The confusing bit here is probably the use of callback functions. While both of the code samples use callbacks, they are used differently. You can think of the first one as a regular for loop where that callback is called each iteration. The second one's function gets called whenever the event is triggered, which is probably after the rest of your code runs.

A different problem here is scope. In the callback function, you re-define gsd in the scope of the callback function:

var gsd = $(this).text();

This gsd isn't the global gsd. This one is local to the callback function. Remove the var and gsd will once again refer to the global variable with that name.

于 2013-06-05T20:48:50.030 に答える
0

ここで何が起こっているのか正確にはわかりませんが、誰かがイベントをクリックしてクリック イベントが発生する前に、2 番目のコードがヒットしたようです。私がお勧めするのは、おそらく別の関数を作成してから、クリック イベント関数内で呼び出すことです。

function alertTextChange(e/*the event*/){
    gsd = $(this).text();
    alert("this is from the click function" + gsd);
}
$p.click(alertTextChange);
于 2013-06-05T20:35:31.733 に答える
0

変数 gsd を再宣言する以外に、p タグの 1 つをクリックすると設定されます。また、クリックする前にアラートが発生するため、gsd は設定されません。

ちょうど追加しました

alert(gsd);

クリックイベント内。

フィドル

于 2013-06-05T20:39:06.300 に答える