2

この質問はたくさん出てきましたが、私はそれを機能させることができません。

5つのdivがあります。最後に使用されたdivの前にdivを非表示にします。したがって、ユーザーがdiv 1のどこかをクリックしてから、div 2のどこかをクリックすると、div 1がフェードアウトします(これはすべて、Ajax呼び出しの後で)

これが私のコードです:

$(document).ready(function() {
    $("#[id^='r_form_']").bind("ajax:success", function(evt, data, status, xhr) {
        var $form = $(this);

        $(this).parent().css("background", "green");

        if($lastForm == null) {
            var $lastForm = $(this);
        };

        if(!($lastForm[0] == $form[0])) {
            $lastForm.parent().fadeOut(1500);
            var $lastForm = $(this);
        };
    });
});

変数$lastFormが未定義の場合は、Ajaxが発生した現在のフォームを割り当てます。

変数は常に未定義です。私はループにを追加しalert('undefined')ました、私はいつもそれを手に入れます。なぜ?

Ajaxリクエストが戻ってきたときに変数がリセットされたせいかもしれません。しかし、私は実際には専門家ではなく、答えを見つけることができないようです。

4

2 に答える 2

5

内側のスコープで宣言されているからだと思います。宣言を関数の外に移動します。各関数は新しいスコープを作成するため、次の呼び出しには保存されません。

コード:

$(document).ready(function() {

    var $lastForm; //<===================
    $("#[id^='r_form_']").bind("ajax:success", function(evt, data, status, xhr) {
        var $form = $(this);

        $(this).parent().css("background", "green");

        if ($lastForm == null) {
            $lastForm = $(this);
        };

        if (!($lastForm[0] == $form[0])) {
            $lastForm.parent().fadeOut(1500);
            $lastForm = $(this);
        };
    });
});​

#セレクターの@minitechがコメントした#[id^='r_form_']ように、そこにあるべきではないようです。

于 2012-04-20T14:00:04.090 に答える
1
if(typeof e === 'undefined') {
    // your code here
}
于 2012-04-20T13:57:13.787 に答える