警报不按我希望的方式工作

时间:2012-02-04 20:21:46

标签: jquery

在此jsfiddle中,请按以下步骤操作:

1:当您打开小提琴时,单击“添加问题”按钮两次,这将在下方添加2行。

2:点击“提交详细信息”按钮,它会出现此错误:

  

您在问题编号上有错误:2

     

您尚未输入有效的问题

     

请输入您对此问题所需的答案数

     

请输入此问题的商标数量

的图表      

您尚未输入有效的问题

     

请输入您对此问题所需的答案数

     

请输入此问题的商标数量

的图表

这是不正确的,上面的警告显示所有错误和错误的问题编号。应该发生的是,如果多行中存在错误,则应显示包含错误的第一行的编号,并在警报中显示这些错误。警报应显示:

  

您在问题编号上有错误:1

     

您尚未输入有效的问题

     

请输入您对此问题所需的答案数

     

请输入此问题的商标数量

的图表

另一个问题是如果你在第二行填写textarea和文本框,它会在下面显示以下警告:

  

您在问题编号上有错误:2

     

您尚未输入有效的问题

     

请输入您对此问题所需的答案数

     

请输入此问题的商标数量

的图表

以上警告不正确,因为它说明了错误所在的错误问题编号。问号应该是1号,而不是2号。那么如何解决这个问题。

以下是验证警报的validation()函数的代码:

function validation() {

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

    alertValidation = "";
    // Note, this is just so it's declared...
    $("tr.optionAndAnswer").each(function() {


        _qid = $("td.qid",this).text();
        _msg = "You have errors on Question Number: " + _qid + "\n";

        $(".textAreaQuestion",this).each(function() {



            if (!this.value || this.value.length < 5) {
                alertValidation += "\nYou have not entered a valid Question\n";
            }

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

        $(".numberAnswerTxtRow",this).each(function() {


            var currenttotal = $(this).closest('.optionAndAnswer').find('.answerBtnsOn').length;

            if (!this.value) {
                alertValidation += "\nPlease Enter in the Number of Answers you Require for this question\n";
            }

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

        });

        $(".txtWeightRow",this).each(function() {


            if (!this.value) {
                alertValidation += "\nPlease enter in a figure for Number of Marks for this Question\n";
            }

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

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

    return true;
}

2 个答案:

答案 0 :(得分:1)

我认为您必须退出.each $("tr.optionAndAnswer") alertValidation,以防(alertValidation != "")有内容(如果if (alertValidation) {{1}},则可以替换{{1}}

查看http://jsfiddle.net/GgvEs/

答案 1 :(得分:1)

您必须检查外部循环($("tr.optionAndAnswer").each())中是否已找到任何错误,并通过返回false来停止它。

在每个循环外部添加它,并将alertValidation声明为var alertValidation,否则它将在全局范围内。

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

我已经修复了你的小提琴演示看看。

http://jsfiddle.net/ShankarSangoli/euL5e/1/