2013-07-20 39 views
-2

我有以下代碼,並且我希望如此,如果我取消選中複選框,它將顯示驗證消息。驗證消息過早觸發

我的代碼

jQuery的

if($('#TermsAndConditions').is(':checked')) 
{ 
} else { 
    alert('Not checked); 
} 

查看

<div class="editor-field"> 
    <%:Html.CheckBox("TermsAndConditions")%> <%: Html.ActionLink("I agree Terms and Conditions", "Terms", "Home")%> 
</div> 

然而,每當我打開表單的警報消息顯示。你能幫我找出問題嗎?

+1

。無論何時加載表單/頁面,警報都會觸發。你需要綁定一個類似'submit'的事件。 – Omar

+0

你希望你的代碼在沒有設置複選框的onchange處理程序的情況下做什麼? –

+0

[tag:jquery-validate]標籤用於特定的插件。標記問題時請小心。編輯。謝謝。 – Sparky

回答

1

這是因爲您的腳本放置在頁面頂部。本質上,您的腳本在#TermsAndCondition複選框存在於範圍之前被加載,因此它違反了您的條件並觸發了其他條件,並且它不是由事件觸發的(例如表單提交或更新複選框狀態),這可能是不受歡迎的。

您應該在觸發事件時執行操作,例如複選框狀態發生變化時。

$("#TermsAndConditions").on("change", function(){ 
    if($(this).is(':checked')) 
    { 
    } else { 
     alert("Not checked"); 
    } 
}); 

或當表單提交

$("#YourFormId").on("submit", function(e){ 
    if($("#TermsAndConditions").is(':checked')) 
    { 
     // Form will submit 
    } else { 
     // Form will not submit 
     alert("Not checked"); 
     e.preventDefault(); 
    } 
}); 

See working demo here

+0

你可以使用'$(this)'在onchange handler –

+0

@roasted真,我已經更新了。謝謝 – Scott

0

,你把你的jQuery代碼?你確定它在頁面完全加載後運行嗎?你可能需要把它放在$(function(){ .. code .. });這樣的:

$(function(){ 
    if($('#TermsAndConditions').is(':checked')) { 

    } 
    else { 
     alert('Not checked); 
    } 
}); 

或者像@Duk說其綁定到submit事件。

0
$('#TermsAndConditions').on('change', function() { 
    if (this.checked) { 

    } else { 
     alert('Not checked'); 

    } 
}); 

或者您希望作爲表單提交的任何其他處理程序,例如,

DEMO

0

由於沒有對事件沒有條件,因爲它不綁定到任何活動頁面load.use change活動期間觸發對

$(document).ready(function(){ 
    $('#TermsAndConditions').change(function(){ 
      if($(this).is(':checked')) { 

      } 
      else { 
       alert('Not checked); 
      } 
     }); 
    }); 
+0

正如OP所說,警報已經顯示,所以這顯然不是問題在這裏 –

+0

@roasted更新ans –

+0

在這種情況下,onchange事件更好,因爲一些瀏覽器(舊?)將觸發點擊事件之前複選框狀態更改給予不預期結果 –