0

これは、html テーブルを検証するための私の jQuery コードです。

function validation() {

    var alertValidation = "";
    var _qid = "";
    var _msg = "";

    $("[class*='q']").each(function (i) {
        var questions = parseInt($("[class*=q" + i + "_qnum]").text());
        var marks = parseInt($("[class*=q" + i + "_ans_text]").text());
        var txtinput = $("[class*=q" + i + "_mark]").val();
        _qid = questions;
        _msg = "You have errors on Question Number: " + _qid + "\n";


        if (txtinput == '' || txtinput == null) {
            alertValidation += "\n\u2022 You have not entered in a value for all the Indivdiaul Marks textbox\n";
        } else if (marks < '0') {

            alertValidation = "Your Total Marks Remaining does not equal 0 \n\n\u2022 You Need To Remove " + Math.abs(marks) + " Marks";
        } else if (marks > '0') {

            alertValidation = "Your Total Marks Remaining does not equal 0 \n\n\u2022 You Have " + marks + " Marks Remaining";
        }

        if (alertValidation != "") {
            return false; //Stop the each loop 
        }

    });


    if (alertValidation != "") {
        alert(_msg + alertValidation);
        return false;
    }

    return true;
}

ここで私が奇妙なことに気付いたのは、残っているマークの数が 0 より大きい場合の検証と、残っているマークの数が 0 より小さい場合の検証が、以下に表示されるようにアラートが出力されたときに完全に機能することです。

0より大きい:

You have errors on Question Number: 1
Your Total Marks Remaining does not equal 0 

• You Have 7 Marks Remaining

0未満:

You have errors on Question Number: 1
Your Total Marks Remaining does not equal 0 

• You Need To Remove 3 Marks

しかし、「Marks per Answer」セクションの下のテキスト入力が空かどうかを検証しようとすると、以下のメッセージが表示されます。

You have errors on Question Number: NaN

• You have not entered in a value for all the Indivdiaul Marks textbox

この検証の質問番号を表示できないのはなぜですか?

また、「Marks per Answer」の下のすべてのテキスト入力に値を入力した場合でも、上記の検証メッセージ アラートが表示されるべきではないときに、まだ表示されるという小さな問題もあります。なぜこれも行うのですか?

以下は、html テーブルの例です。

<table border='1' id='markstbl'>
<thead>
<tr>
<th class='questionth'>Question No.</th>
<th class='answermarksth'>Marks per Answer</th>
<th class='noofmarksth'>Marks Remaining</th>
</tr>
</thead>
<tbody>

<tr class="questiontd">
<td class="questionnumtd q<?php echo$questionId?>_qnum" name="numQuestion" rowspan="1">1 <input type="hidden" name="q1_ans_org" class="q1_ans_org" value="5"><input type="hidden" name="q1_ans" class="q1_ans" value="5"></td>
<td class="answermarkstd">
<input class="individualMarks q1_mark"  q_group="1" name="answerMarks[]" class="individualtext" type="text" onkeypress="return isNumberKey(event)" maxlength="3" />
</td>
<td class="noofmarkstd q1_ans_text"  q_group="1" rowspan="1"><strong>5</strong></td>
</tr>
    </tbody>
</table>
4

2 に答える 2

0

長さを使用して、!=""の代わりに属性に空のテキストがあるかどうかを確認できます

alertValidation.length > 0

以下のコードを確認してください

parseInt($("[class*=q" + i + "_qnum]").text());

この$( "[class * = q" + i + "_qnum]")。text()が未定義の場合、parseIntはNaNのみを返します

ありがとう

于 2012-12-05T03:53:52.973 に答える
0

alert($( "[class * = q" + i + "_qnum]")。text());を使用してみてください。

または、GoogleChromeまたはFirebugを使用してデバッグします。

each()は、Webに存在しないクラスをキャッチするか、文字、Intに解析できないスペースが含まれているため、スクリプトでNaNが発生したと思います。チェックしてみてください。

于 2012-12-05T07:30:14.813 に答える