2

アラート内のメッセージを連結して、エラーが発生した最初の質問のすべてのエラーメッセージが表示されるようにします。たとえば、3つの質問があり、質問1と質問3にエラーがある場合、送信ボタンをクリックすると、検証アラートに次のようなアラートの例が表示されます。

質問番号にエラーがあります:1

•すべての個別マークテキストボックスに値を入力していません

•すべての個別マークテキストボックスに値を入力していません残りの合計マークが0に等しくありません

質問1のエラーを解決した後で初めて、ページを再度送信すると、以下の例として質問番号3のアラートが表示されます。

質問番号にエラーがあります:3

•すべての個別マークテキストボックスに値を入力していません

•すべての個別マークテキストボックスに値を入力していません残りの合計マークが0に等しくありません

私が抱えている問題は、一度に1つの質問番号しか表示されていないことですが、質問1と3のすべてのエラーが表示されているため、次のようになります。

質問番号にエラーがあります:1

•すべての個別マークテキストボックスに値を入力していません

•すべての個別マークテキストボックスに値を入力していません残りの合計マークが0に等しくありません

•すべての個別マークテキストボックスに値を入力していません

•すべての個別マークテキストボックスに値を入力していません残りの合計マークが0に等しくありません

私の質問は、アラートをどのように機能させて、私が望む方法と一致させることができるかということです。

以下はjqueryコードです。

function validation() {
    var alertValidation = "";
    var _qid = "";
    var _msg = "";

    $("input[data-type='qmark']").each(function(i) {  
        var questions = $(this).attr("data-qnum");
        var marks = parseInt($("[class*=q" + i + "_ans_text]").text()); 
        var txtinput = $(this).val(); 
        _qid = questions;
        _msg = "You have errors on Question Number: " + _qid + "\n";

        if (txtinput == '') {
            alertValidation += "\n\u2022 You have not entered in a value in 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";   
        }

        if(marks > '0') {
            alertValidation += "Your Total Marks Remaining does not equal 0 \n\n\u2022 You Have " + marks +  " Marks Remaining";   
        }
    });

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

上記のコード//commentに、このコードを含めると、次のようになります。

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

次に、質問ごとにアラートごとに1つのメッセージのみを表示します。

警告を除く:

質問番号にエラーがあります:1

•すべての個別マークテキストボックスに値を入力していません

•すべての個別マークテキストボックスに値を入力していません残りの合計マークが0に等しくありません

警告します:

質問番号にエラーがあります:1

•すべての個別マークテキストボックスに値を入力していません

   UPDATE:

以下はコードの更新です:

関数validation(){

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

    $("input[data-type='qmark']").each(function(i) {  
    var questions = $(this).attr("data-qnum");
    var marks = parseInt($("[class*=q" + i + "_ans_text]").text()); 
    var txtinput = $(this).val(); 
    _qid = questions;
    alertValidation += "\nYou have errors on Question Number: " + _qid + "\n";


if (txtinput == '') {
    alertValidation += "\n\u2022 You have not entered in a value in 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";   
}

if(marks > '0')
{

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



        });


    if (alertValidation != "") {
       alert(alertValidation.substr(1));
        return false;
    }

    return true;
}

しかし、問題は、以下が警告するものであるということです。

•質問番号にエラーがあります:1

•すべての個別マークテキストボックスに値を入力していません質問番号にエラーがあります:1

•すべての個別マークテキストボックスに値を入力していません残りの合計マークが0に等しくありません

•残り5つのマークがあります質問番号にエラーがあります:2

•質問番号にエラーがあります:3

•すべての個別マークテキストボックスに値を入力していません残りの合計マークが0に等しくありません

•残り5つのマークがあります質問番号にエラーがあります:3

•すべての個別マークテキストボックスに値を入力していません質問番号にエラーがあります:3

•すべての個別マークテキストボックスに値を入力していません

4

2 に答える 2

2

_msgすべての.each()反復でをリセットしています。_msgメッセージの部分をalertValidation質問ごとに追加するだけであれば問題ありません。

テストページがないため、このコードが機能するかどうかはわかりません。

function validation() {

    // only keeping track of the final message
    var alertValidation = "",
        // toggle for showing only one error
        showOnlyOneError = true;

    $("input[data-type='qmark']").each(function(i) {  
        var questions = $(this).attr("data-qnum");
        var marks = parseInt($("[class*=q" + (i+1) + "_ans_text]").text(), 10); 
        var txtinput = $(this).val(); 

        // the message for this question
        var msg = '';

        if (txtinput == '') {
            msg += "\n\u2022 You have not entered in a value in all the Indivdiaul Marks textbox\n";
        }

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

        // if there is an error for the question, add it to the main message
        if (msg.length) {
            alertValidation += alertValidation.length ? '\n\n' : '';
            alertValidation += "You have errors on Question Number: " + questions + "\n";
            alertValidation += msg;
            // stop if we only care about the first error
            return !showOnlyOneError;
        }
    });

    // show the error messages
    if (alertValidation != "") {
        alert(alertValidation);
        return false;
    }

    return true;
}

parseInt(...)編集:ステートメントのバグを修正しました。

更新されたjsFiddle

于 2012-12-18T08:54:54.860 に答える
0

あなたの問題はこの行です:

_msg = "You have errors on Question Number: " + _qid + "\n";

これにより、既存のテキストが上書きされます。したがって、必要なのは、すべてのテキストを(との代わりに)単一の変数に書き込み_msg alertValidation常に次のように追加することです。

alertValidation += "\nYou have errors on Question Number: " + _qid + "\n";

その後

alert(alertValidation.substr(1));
于 2012-12-18T08:57:03.660 に答える