2014-04-14 145 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