2014-04-14 101 views
0

我目前正試圖解決我的jQuery和我的html表單的問題。複選框不能取消選中

問題:我有一個複選框,允許人們檢查接受或不接受條款和條件。此複選框正在通過名爲validateAccept()的jquery函數進行驗證。但是,在我插入if有效返回true之後,如果不是有效返回false,則複選框將無法響應單擊。我是一個jQuery初學者。我不確定哪個部分出了問題。

我的HTML代碼:

<form action="<? echo $filename; ?>" id="acceptanceForm" name="acceptanceForm" method="post"> 
    <p>Terms and conditions.......</p> 
    I ACCEPT THE TERMS AND CONDITIONS 
    <input type="checkbox" name="accept" id="accept" value="yes"/> 
    <span id="acceptInfo" class="inputInfo"></span> 
</form> 

我的jQuery驗證碼:

$(document).ready(function(){ 

//Validation (TERMSANDCONDITION) 
//termsandconditions variables 
var acceptanceForm = $("#acceptanceForm"); 
var accept = $("#accept"); 
var acceptInfo = $("#acceptInfo"); 

//Trigger validation 
//On blur 
accept.click(validateAccept); 
//On key press 
accept.keyup(validateAccept); 
//On submit 
acceptanceForm.submit(function() { 
    if (validateAccept()) 
     return true 
    else 
     return false; 
}); 

//Validation 
//validate accept 

function validateAccept() { 
    var isChecked = $('#accept').is(':checked'); 
    if (isChecked) { 
     accept.removeClass("error"); 
     acceptInfo.text("Thanks"); 
     acceptInfo.removeClass("error"); 
     acceptInfo.removeClass("inputInfo"); 
     acceptInfo.addClass("validated"); 
     return true; 
    } else { 
     accept.addClass("error"); 
     acceptInfo.text("Please Read and Accept the Terms and Conditions"); 
     acceptInfo.removeClass("inputInfo"); 
     acceptInfo.removeClass("validated"); 
     acceptInfo.addClass("error"); 
     return false; 
    } 
} 

我所知道的: 我知道問題出在迴歸真實,返回false我在補充道。我試着沒有他們在JS小提琴和複選框工作,但形式不是。因此,我知道返回正確和錯誤是必要的,但我不知道我應該如何排序才能使其工作。我已經做了一些研究並認識到,類似於我的小小案例。這種驗證技術是假設在文本輸入工作,所以我不知道如果我編輯它的方式是好的工作複選框。

JSFiddle

+1

我可以檢查,並取消選中該複選框在你的小提琴,是不是你問這個是什麼? – Hatsjoem

+1

你忘了在你的小提琴中加入jQuery – j08691

+0

@Hatsjoem我忘記了包含jQuery。 – Hubert

回答

3

的問題是,在點擊處理程序返回false阻止默認行爲。如果你需要在這兩種情況下使用這一點,而忽視單擊處理程序的情況下,返回值,你可以這樣做:

accept.click(function(){ 
    validateAccept(); 
}); 

http://jsfiddle.net/8JdRb/1/

在這種情況下,單擊處理函數沒有返回值並且不會影響複選框的功能。

0

我找到了答案。我可以用.change(validateAccept);代替。它會和我想要的完全一樣。謝謝大家。

JSFiddle