2013-04-17 145 views
0

我有另一個邏輯問題,我陷入了困境。我需要這種形式只允許其中一個或另一個。文本輸入或複選框,不是兩個!jquery驗證表單邏輯

}else if(question_pos==7){ 
     if(!($('#test_check').prop('checked')) && $("#test").val()!="0" && ($("#test").val() =="" || 
       !Number($("#test").val()) || Number($("#test").val())<0 || Number($("#test").val())>20)){ 
      alert("placeholder?"); 
      return false; 

輸入:

<table class="screening" width="100%" cellspacing="5px"> 
    <tr> 
     <td width="8%" align="right"><input name="test" id="test" type="text" pattern="\d*" size="3" maxlength="2" value="<%=session.getAttribute("test")==null?"":session.getAttribute("test")%>"/> 
    </td> 
    <td>day(s)</td> 
</tr> 
     <tr> 
     <td width="8%" align="right" valign="top"><input name="test_check" id="test_check" type="checkbox" value="1" <%=(session.getAttribute("test_check")!=null && session.getAttribute("test_check").equals("1"))?"checked":""%>/></td> 
     <td width="92%"><label for="test_check">My baby is still in the hospital</label></td> 
    </tr> 
    </table> 

驗證需要確保沒有文本輸入,如果複選框被選中。

+0

請張貼整個問題。 – 2013-04-17 23:08:36

回答

1

基本上,您要檢查checked屬性是否爲true,並且該字段是否包含某些字符。如果兩個條件都滿足,則表示表單的狀態是無效的。

下面是一個例子http://jsfiddle.net/g4q34/

你應該避免調用$("#test")一遍又一遍,它使代碼的可讀性,是非常低效的性能代價。將參考存儲在變量中,然後重新使用該變量。

var checked = $('#test_check').prop('checked'), 
    val = $("#test").val(); 

if (checked && val.length) { 
    //invalid 
} else { 
    //the checkbox is checked OR the input contains text, but not BOTH 
} 

這裏是用自己的代碼示例:

} else if (question_pos==7) { 
     if($('#test_check').prop('checked') && $("#test").val().length) { 
      alert("placeholder?"); 
      return false; 
     } 
+0

@ user2089255,「文本輸入或複選框」,這正是下面的代碼所示。只有當輸入包含文本並且複選框被選中時,它纔會進入'if'語句。還有什麼我不明白的嗎? – plalx

+0

我認爲我的驗證是好的,但似乎在某處存在邏輯錯誤或錯誤的括號或錯誤(不)逗號。 – user2089255

+0

@ user2089255,下面的答案是你的問題,因爲它是。如果這不是你想要的,請更新你的問題。 – plalx

0

這是結束了工作正是我需要它。我只是喝了一些咖啡,然後醒來!

}else if(question_pos==7){ 
    if(!$('#example_check').prop('checked') && $("#example").val()!="0" && ($("#example").val() =="" || !Number($("#example").val()) || Number($("#example").val())<0 || Number($("#example").val())>20)){ 
    alert("How long did your baby stay in the hospital?"); 
    return false; 
    }else if($('#example_check').prop('checked') && $("#example").val().length) { 
    alert("Have you taken your baby home or is your baby still in the hospital?"); 
    return false; 

我改變了「測試」,以「榜樣」