2013-01-17 80 views
1

我有一个字段gender?使is Pregnant?如果性别设置为女,jQuery验证插件验证一个领域已成为“禁用”

那么如果is Pregnant?场是无人接听,它标记为无效。

如果您返回并将gender?设置为MALE,那么验证仍会将is Pregnant?标记为无效,即使它已经是disabled

jQuery说disabled字段被忽略。我甚至尝试: jquery.validate validating disabled field

ignore: ":hidden" 

我缺少什么?

+0

因为MALE从不pragnent所以“怀孕吗?”为无效 –

+0

是的,如果性别是男性,“是怀孕吗?”已禁用,不应验证。但它仍然被验证> _ < – trafalgar

+1

我认为你仍然需要忽略':disabled',因为你正在关闭它而不是隐藏它? –

回答

2

这是一个有效的问题,与此标记

<form> 
<div> 
    Male: 
    <input type="radio" name="gender" value="male" /> 
    Female: 
    <input type="radio" name="gender" value="female" /></div> 
<br /> 
<div> 
    Pregnant: 
    <input type="radio" name="pregnant" value="yes" /> 
    Not Pregnant: 
    <input type="radio" name="pregnant" value="no" /></div> 
<br /> 
<input type="submit" /> 
</form> 

这个脚本

$('[name=gender]').click(function() { 
    var disabled = $(this).val() === 'male'; 
    $('[name=pregnant]').attr('disabled', disabled); 

    // UNCOMMENT THIS TO FIX 
    // if ($('[name=pregnant]').hasClass('error')) { 
    // $('form').validate().form(); 
    // } 
}); 

$('input').addClass('required'); 

$('form').validate({ 
    ignore: ":disabled", 
    errorPlacement: function (error, element) { 
     error.appendTo(element.parent("div")); 
    }, 
    submitHandler: function() { 
     alert('form is ok'); 
    } 
}); 

重现该问题:

  • 咔嗒阴
  • 点击提交
  • 错误消息显示 - 这是正确的
  • 点击男性 - 错误信息仍显示
  • 点击提交 - 表单有效

从而@ioan说,你需要尝试摆脱此错误消息作为这是混乱的,虽然形式是有效的错误消息仍然存在

+0

谢谢,可爱的答案。^__ ^ – trafalgar

0

在验证阶段忽略被禁用的字段但是如果验证阶段在字段被禁用之前开始生效,那么错误信息仍然存在。

您可以尝试通过清除验证错误并重新验证表单来简单地删除验证消息。

+0

我不错过一些验证选项?我试过 onfocusout:true – trafalgar

+1

我不认为你必须设置额外的验证选项,我有完全相同的问题,我通过强制重新验证来解决这个问题。也许这不是最好的想法,但在我的情况下工作得很好。 – ioan

+0

你是如何强制验证的?我尝试在$('#isGender')。中放置$('#myForm').validate(),但它不起作用T_T – trafalgar

1

.validate()ignore:选项的工作原理如下:

忽略,默认:":hidden"
元素验证时,简单地过滤出来,不容忽视。 jQuery的非方法是使用 ,因此所有被not()接受的东西都可以通过作为这个选项。

http://docs.jquery.com/Plugins/Validation/validate#toptions

工作演示:http://jsfiddle.net/us9aE/

HTML:

<form id="myform"> 
    <input type="text" name="field" disabled="disabled" /> <br/> 
</form> 

的jQuery:

$(document).ready(function() { 
    $('#myform').validate({ 
     ignore: ":disabled" 
    }); 
}); 

如果您想要更具体的帮助,请展示您的相关HTML,您的jQuery,并可选择创建jsFiddle演示。