1

jqueryを使用するjspファイルを含むクラスのWebアプリケーションを作成しています。送信する直前にアプリがアラートをトリガーするようにしたい。これは私の実際のプログラムでは機能する場合もあれば、アラートがトリガーされない場合もあります。常に機能する、または機能しないインスタンスを特定できないようです。Firebugブレークポイントを追加しない限り、エラーコンソールはこの問題について沈黙しています。それからそれは私に与えます

Error: attempt to run compile-and-go script on a cleared scope
Source File: http://code.jquery.com/jquery-1.7.2.min.js
Line: 2

しかし、それが何を意味するのか私にはわかりません。Firebugに関する限り、アラートメッセージの前に評価が停止する理由がわかりません。

問題を文書化したsscceを作成しようとしましたが、送信が機能しなかったため、実際のプログラムとはあまりにも異なっていたと思います。実際のプログラムのコードをいくつか示します。(SSCCEがないことをお詫びします。)

$(document).ready(function() {
    $("#questionDisplay").submit(function() {
        var correctAnswer = $(".correctAnswer").attr("value");
        var answer = "";

        if ($(".multipleChoice").length > 0) {
            answers = $("input:checked");
            for (var obj in answers) {
                answer += obj.attr("value") + "#";
            }
        } else if ($(".fillBlank").length > 0) {
            for (var answerNo = 1; $(".answer" + answerNo).length > 0; ++answerNo) {
                answer += $(".answer" + answerNo).attr("value") + "#";
            }
        } else {
            answer = $(".answer1").attr("value");
        }

        if (answer == correctAnswer) {
            alert("Yes! Correct!");
        } else {
            alert("Sorry, incorrect.");
        }
    });
});

jspは非常に混乱しています(スクリプトレットを使用する必要があります:()が、見たい場合はlemmeだけを知ってください。

送信ハンドラーを毎回動作させるにはどうすればよいですか?

4

1 に答える 1

3

あなたの例でanswersは、要素のjQueryコレクションです。を使用してループすることfor(var obj in answers) { }は、実際には要素自体ではなく、回答のプロパティをループすることです。したがって、プロパティで .attr() を呼び出しても機能しません。

一般に、jQuery にエラーがあるというデバッガーの状態が表示された場合、99.9% の確率で、jquery で選択されていないオブジェクトに対して jQuery メソッドを呼び出しています。この場合、Chrome の JavaScript コンソールでエラーを確認しましたが、コンソールによって結果が異なる場合があります。

jQuery 要素を格納する変数の前に $ を付けて、それらが jQuery オブジェクトであることを示すことをお勧めします。たとえば、$answers内容を簡単に追跡できます。

使用する:

answers.each(function() {
     answer += $(this).attr("value") + "#";
});

これの代わりに:

for (var obj in answers) {
    answer += obj.attr("value") + "#";
}
于 2012-08-10T02:26:14.320 に答える