jQuery验证插件错误消息放置单选按钮

问题描述:

请有人帮助我,我真的坚持了一整天。 我有一个不同类型的输入(电台,复选框等)的PHP形式(多页)。我需要的是:jQuery验证插件错误消息放置单选按钮

  1. 如果用户不填写必填字段,然后按下继续按钮,他应该收到错误消息旁边或上方,这一领域。

  2. 如果他忘记填写某些领域,其他输入字段不应该被清除(因为我不想让他/她感到厌倦再重新回答所有这些问题的)

这是我迄今使用jQuery插件尝试:(对不起,我不能贴上全部的代码,因为它太长)

<form name="MovieSurvey" id="formId" action="page2.php" method="post" /> 
<fieldset id = "q1"> <legend class="Q1"></legend> 
<label> What is your gender?<span>*</span></label> 
<div class="fieldset content"> 
<div class="error_message_holder"></div> 

<Input type = 'radio' Name ='q1' value = 'male'>Male 
<Input type = 'radio' Name ='q1' value = 'female'>Female 
</div> 
</fieldset> 
.... 
.... 
<input type="submit" name= "continue1" value="Continue" /> 
</form> 

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> 
<script src="http://jqueryvalidation.org/files/dist/jquery.validate.min.js"></script> 
<script src="http://jqueryvalidation.org/files/dist/additional-methods.min.js"></script> 

<script> 
$(document).ready(function() { 
$('#formId').validate({ // initialize the plugin 
    rules: { 
     q1: { 
      required: true, 
     }, 
     q2: { 
      required: true, 
     }, 
     q5: { 
      required: true, 
     }, 
     q6: { 
      required: true, 
     } 
    }, 

    errorPlacement: function(error, element) { 
     error.html('Please fill this field'); 

    if(element.closest('.fieldset content').find('label.error').length==0){ 
     error.insertBefore(element.closest('.fieldset content').find('.error_message_holder')); 

    } 
    }  

}); 
}); 
</script> 
</div> 
</fieldset> 

</body> 
</html> 

它的工作原理差不多好了,唯一的问题是之间显示的错误信息无线电按钮和标签! (这是当我不写errorPlacement:函数部分),为了解决它,我添加了放置部分,但现在它什么也没有显示!

有人可以帮我解决吗?

感谢,

+0

为什么不使用HTML5的必需属性? – Edward 2014-09-24 18:04:19

+0

你绝对不应该这样做:'error.html('请填写此字段');'该插件有其他方法来更改错误消息的措辞。我建议你阅读文档。 – Sparky 2014-09-25 02:19:18

报价OP:

“如果用户不填写必填字段,然后按下继续按钮,他应该收到错误消息旁边或上方,这一领域。”

您正在使这种方式比它需要更复杂。

  • 只需使用insertBefore,而不是默认的insertAfter,在errorPlacement回调。

    errorPlacement: function (error, element) { 
        // error.insertAfter(element); // default function 
        error.insertBefore(element); 
    }, 
    
  • 然后使用errorElement选项将label变成一个div,这迫使该消息到自己的行。这会导致上面的您的单选按钮组,正如您所要求的。

    errorElement: 'div' // default is 'label' 
    

报价OP:

“如果他忘记填写某些领域,其他输入字段不应该被清除(因为我不想让他/她得到无聊再次回答所有这些问题)“

这已经是默认行为。这个插件不会,也不能改变任何键入字段的值。它只阻止提交并显示/隐藏错误消息。

DEMO:http://jsfiddle.net/9bkjsg8o/

文档(所有选项):http://jqueryvalidation.org/validate


注意

form元素过早地在开放标签的/>关闭.. 。

<form name="MovieSurvey" id="formId" action="page2.php" method="post" /> 

form容器元件,因此已经有一个称为</form>一个结束标记。

你打开标签应该是这样的......

<form name="MovieSurvey" id="formId" action="page2.php" method="post"> 
+0

谢谢:)其实我只是做了它,它确定:)即使没有添加errorElement:div,它的工作原理也是一样的:p – mOna 2014-09-25 09:29:39

+0

对不起,我刚刚在第二页面遇到了一个新问题! :(在第二页中,我使用自动完成(通过javascript和ajax)我的一个问题!我添加jQuery验证代码后,自动完成不再工作:(你有什么想法吗? – mOna 2014-09-25 09:53:54

+0

我发布了我的问题作为一个新的职位。请你好好看看吗?http://*.com/questions/26036771/auto-complete-not-work-wth-jquery-validation-plugin-at-the-same-time – mOna 2014-09-25 11:09:06

好耶,那是因为你的错误消息架前插入。

我觉得应该是:

error.appendTo(element.closest('.fieldset content').find('.error_message_holder')); 

BTW:这个问题不应该被标记为 “PHP”。 PHP与它无关。

+0

感谢您的回答,但没有任何变化:(实际上,当我插入放置部分(上面的代码的最后4行)时,它甚至不显示邮件,但没有放置部分,我收到它在错误的地方! – mOna 2014-09-24 18:16:34

+0

好吧,用这种方法找到bug有点难,你能举一个例子来像http://jsfiddle.net/那样“工作”吗?这会帮助我们帮助你调试你的问题。 – vrijdenker 2014-09-24 18:20:58

+0

抱歉,我非常新手,我不知道它是如何工作的:(是否有任何其他信息我可以与你分享,可能有帮助吗?:( – mOna 2014-09-24 18:24:12