2012-12-18 31 views
2

我想連接我的警報中的郵件,以便它顯示遇到錯誤的第一個問題的所有錯誤消息。例如,如果我有3個問題,並有在問題1的錯誤和問題3,當我點擊提交按鈕,確認警報應該像這樣顯示的例子警告:如何在警報中正確地連接郵件

你有問題編號的錯誤: 1

•您還沒有一個值在所有Indivdiaul標記文本

•您還沒有一個值在所有Indivdiaul標記文本 您的總商標剩餘進入進入不等於0

這是我的問題1解決錯誤後,才當我提交頁面再次就說明了問題編號3警報如下的例子:

你有問題編號的錯誤:3

•您已經在值中的所有Indivdiaul標記文本沒有進入

•您還沒有一個值在所有Indivdiaul標記文本框中輸入 您的總剩餘商標不等於0

我遇到的問題是,它只能顯示1題號在時間,這是好的,但它顯示所有的錯誤,從問題1和3,所以它看起來像下面這樣:

你對問題編號錯誤:1

•您還沒有一個值在所有Indivdiaul標記文本框中輸入

•您還沒有一個值在所有Indivdiaul標記文本 您的總商標剩餘進入不等於0

•您還沒有一個值在所有Indivdiaul標記文本

•您還沒有一個值在所有Indivdiaul標記文本 您的總商標剩餘進入進入不等於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 
} 

那麼它的作用是,它只能顯示一個消息每個問題的每個提示e。摹

除了提醒:

你有問題編號的錯誤:1

•您還沒有一個值在所有Indivdiaul標記文本框中輸入

•您還沒有進入所有個人註冊商標文本框中的值 您的剩餘總商標不等於0

它將只是警告:

你有問題編號的錯誤:1

•您還沒有一個值在所有Indivdiaul標記文本框中輸入

UPDATE: 

下面是一個更新代碼:

函數驗證(){

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

•您還沒有一個值在所有Indivdiaul標記文本 進入你對問題編號錯誤:1

•您還沒有一個值在所有Indivdiaul標記文本框中輸入 您的總剩餘商標不等於0

•你有5個標記RemainingYou有問題編號的錯誤:2

•您已經在問一些誤區:3

•您還沒有一個值在所有Indivdiaul標記文本框中輸入 您的總商標其餘不等於0

•你有5個標記RemainingYou有問題編號的錯誤:3

•您還沒有一個值在所有Indivdiaul標記文本框中輸入 你有問題編號錯誤:3

•您還沒有在所有的Indivdiaul標記文本

+1

不要使用'alert'這是非常有限的。使用模態窗口。 – elclanrs

+0

@elclanrs但警報必須能夠完成這項工作,不是嗎?這只是在我的應用程序中,在所有其他頁面中,我都使用了警報,所以我爲什麼要將它保留爲驗證提醒 – user1881090

回答

2

在值中輸入你在每一個迭代.each()重置_msg。如果您只是在問題的基礎上將消息的_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

+0

@ user1881090謝謝。即使'showOnlyOneError'爲'true',我也會重新顯示一個以上的錯誤。它在其他方面是否正常工作?有點難以分辨... – tiffon

+0

@ user1881090我發現了'parseInt()'語句的錯誤。答案已更新。另外,我實際上並不瞭解驗證規則的工作方式。有邏輯錯誤嗎? (我將刪除我以前的一些不再相關的評論。) – tiffon

+0

非常感謝,upvote和最佳答案 – user1881090

0

你的問題是這樣的一行:

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

這將覆蓋任何現有的文本。所以,你需要做的是寫的所有文字到一個單一變量(而不是_msgalertValidation),並始終追加:

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

然後

alert(alertValidation.substr(1)); 
+0

我可以問一下substr(1)在上面的例子中做了什麼 – user1881090

+0

我認爲我在做不正確。我在我的問題中包含了一個更新,它顯示了當前的代碼,並試圖匹配您所陳述的更改,並顯示當前的警報輸出 – user1881090

+0

re substr(1):如果您總是追加,那麼您將有一個額外的'\ n '(消息的開頭),除非你忘記把它寫進'你有錯誤'字符串,當然。 –

相關問題