1

次の HTML コードを使用してテーブルを表示しています。

<form id="Marks" action="/u0877654/Mobile/individualmarks.php" method="post">   

<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>

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

<p><input id="submitBtn" name="submitMarks" type="submit" value="Submit Marks" /></p>

</form>

以下は、テーブルの外観です。

Question No.     Marks Per Answer          Marks Remaining
    1            (value=5 text input)         0
    2            (blank text input)           5

これで、jquery を使用して上記のテーブルの検証を作成しました。行に 0 以外の数値 (それより高いか低いか) が含まれている場合、次のようなアラートが表示されます。

0より大きい:

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

• You Have NaN Marks Remaining

0未満:

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

• You Need To Remove NaN Marks

もう 1 つの検証として、ユーザーが [Marks Per Answer] 列の下にテキスト入力を空白のままにすると、以下のメッセージが表示されるはずです。

You have errors on Question Number: 

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

ご覧のとおり、2つの問題があります。まず、問題番号にエラーが含まれている番号は表示されません。エラーが含まれている最初の問題の質問番号を表示する必要があります。

もう 1 つの問題は、NaN を表示し続けることです。0 にするために削除する必要があるマークの数、または 0 にするために追加する必要があるマークの数を表示する必要があります。

上記の2つの問題はどのように修正できますか?

これは私の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;
}
4

2 に答える 2

1

を行うときに文字列を比較して$("[class*=q" + i + "_mark]").text() < '0'いるので、!=(等しくない)演算子と<(未満)を試してください。例:

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


            if (!this.value) {
                alertValidation += "\n\u2022 You have not entered in a value for all the Indivdiaul Marks textbox\n";
            }

            if ($("[class*=q" + i + "_mark]").text() != '0') {
                alertValidation = "Your Total Marks Remaining does not equal 0 \n\n\u2022 You Need To Remove " + Math.abs(marks) + " Marks";
            } else {
                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 
            }    
        });

それ以外の場合は、変数を使用します。

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


            if (!this.value) {
                alertValidation += "\n\u2022 You have not entered in a value for all the Indivdiaul Marks textbox\n";
            }

            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 
            }    
        });
于 2012-12-05T00:20:45.800 に答える
1

入力から値を取得するには、.val() を使用する必要があります。

_qid = $(".q" + i + "_ans_org").val();
_msg = "You have errors on Question Number: " + _qid + "\n";

編集:どのセレクターを使用していますか? クラス セレクターの前には単にドットが付きます。

var marks = parseInt($(".q" + i + "_ans_text").text());
于 2012-12-05T00:27:50.747 に答える