2011-08-03 78 views
0

我有以下要求:JavaScript驗證問題

  1. 從數據庫中獲取servlet的問題。
  2. 顯示themin jsp。
  3. 檢查問題是否是強制性的。
  4. 如果問題是強制性的,那麼在提交表單的時候回答這個問題,如果問題沒有答案,那麼不要提交表單並顯示警告。

到3號我已經做到了。但不知道如何去關於數字4.我怎樣才能檢查在JavaScript中。由於問題的數量不是固定的,因爲它們來自數據庫。還有多少是強制性的也不是固定的。如何去做這件事?

我應該在javascript中檢查什麼值?如何知道在JavaScript中顯示哪些問題是強制性的?

----編輯

這是怎麼我的數據顯示在JSP:

for (Question question : questions) {%> 
    <tr> 
    <td><b><%= question.getDefination() %></b> 
    <table style="margin-left: 25px;"> 
<% 
    int type = question.getType(); 
    List<Option> options = question.getOptions(); 
    for(Option option: options){%> 
     <tr> 
      <% if(type == 2){ %> 
        <td><input type="radio" name="<%=question.getIdQuestion() %>" value="<%= option.getIdQueOption() %>" /><%= option.getOptionName() %></td> 
      <%} else if(type == 1) { %> 
        <td><input type="checkbox" name="<%=option.getIdQueOption() %>" value="<%= option.getIdQueOption() %>" /><%= option.getOptionName() %></td> 
      <%} %> 
     </tr> 
    <%}%> 
</table></td></tr> 
<%}%> 

---編輯2 示例頁面看起來就像這樣:

Sample page

+1

如果您發佈了一些生成的HTML和JavaScript代碼,人們可以給出與您已經完成的工作直接相關的答案。你可以嘗試的一件事就是在你的(服務器端)JSP代碼中,你爲每個問題提供了一個特定的類,例如'class =「mandatory」',然後你可以添加一個驗證函數從窗體的onsubmit事件),循環所有與該類的元素。我不會重新發明輪子:有幾個庫具有可定製的驗證代碼(例如,有幾個jQuery驗證插件)。 – nnnnnn

+0

@nnnnnn:我已經添加了如何在jsp上顯示數據列表。在這裏,我有一個方法question.isMandatory()來檢查問題是否是強制性的。 –

回答

1

我建議像nnn一樣做nnn還建議:爲所有必填問題添加一個類,以便您能夠從可選問題中識別它們。然後,你需要一些Javascript來查找強制性問題(爲了簡單起見,我建議使用jQuery)。

假設您對每個必填問題的tr元素都有class =「mandatory」。

function onSubmit(e) { 
    // Set the default result to be successful 
    var allFilled = true; 
    // Get all mandatory rows 
    var mandatory = $('tr.mandatory'); 

    // Loop through each matching element 
    mandatory.each(function(i, question) { 
     var answer = $(question); 

     // Find all elements that are checked and if none is found, 
     // the question must be unanswered 
     if (answer.find('input:checked, input[type="text"][value!=""]').length === 0) 
      allFilled = false; 
    }); 

    // If the default value "true" was changed, there must be empty answers 
    if (!allFilled) 
     e.preventDefault(); 
} 

當然,你必須綁定onSubmit函數來提交你正在檢查的窗體上的事件。

順便說一句,我不認爲有一個表內的表是有效的HTML,但我不知道。

+0

非常感謝。這適用於複選框和收音機類型的問題。但我也有類型的文本框如何檢查他們的問題。這種邏輯在那裏失敗。我有類型收音機,複選框和文本框的問題的組合。 –

+0

@mark更新了代碼,以查找非空文本框。 – zatatatata

+0

這不起作用。國旗永遠是假的。我添加了一個有問題的屏幕截圖來演示頁面的外觀。如果allFlag爲false,我的表單也會一直提交如何防止它。 –