【问题标题】:Re-validate input on radio button selection重新验证单选按钮选择的输入
【发布时间】:2015-01-16 01:55:40
【问题描述】:

我目前有一个使用 jquery 验证的表单。该表单包含许多单选按钮(“是”、“否”),并且每个相应的“是/否”单选按钮组都有一个描述文本框,如果用户选择“是”,则需要该文本框。像这样:

这是执行验证的方法:

$.validator.addMethod('conditionalrequired', function (value, element, params) {
    var input = $(params);
    var checked = input.prop('checked');
    if (checked) {
        return value != '' && value != "0";
    }
    return true;
});

$.validator.unobtrusive.adapters.add("conditionalrequired", ["boolpropertyname"], function (options) {
options.rules["conditionalrequired"] = "#" + options.params.boolpropertyname + 'Yes';

options.messages["conditionalrequired"] = options.message;

});

验证效果很好。我唯一的问题是当验证被触发并显示错误消息时,选择“否”选项不会删除错误消息(虽然它不会阻止表单被提交)。我需要做什么才能获得我想要的效果?

【问题讨论】:

  • jQuery Validate 插件默认已经可以自己处理radio 按钮。非常不清楚为什么您发现需要为此创建自定义方法。您需要解释并向我们展示复制问题所需的其余代码。你的.validate() 方法在哪里?相关的 HTML 标记在哪里?
  • 感谢您的回复。不需要单选按钮选择。默认情况下,它总是以一种或另一种方式选择。如果选择了是单选按钮,则需要填写文本框。页面上有多个这样的实例。我能够做的是循环并验证“否”选择的表单。
  • 这并不完全正确。也可以在未选择 radio 按钮的情况下加载表单;所以在那种情况下required 是完全合理的。但是,在您的情况下,插件应该仍然正确地自动切换消息,因为它将radio 输入与checkbox 输入相同。同样,我们需要查看足够多的代码来重现您的问题。
  • 对不起。当我说“默认情况下”时,我指的是我的表格。我在控制器上设置了值。我能够弄清楚我在寻找什么。如果让您感到困惑,我深表歉意。

标签: jquery radio-button jquery-validate


【解决方案1】:

radio 输入的change 事件上,您可以调用the .valid() method 来触发验证测试,这将根据需要切换相关的错误消息。

  • 当任何radio 输入改变时触发。仅重新评估正在更改的radio

    $('#myform input[type="radio"]').on('change', function() {
        $(this).valid();  // <- re-validate this one radio input
    });
    
  • 当任何radio 输入改变时触发。一次重新评估所有 radio 输入。

    $('#myform input[type="radio"]').on('change', function() {
        $('#myform input[type="radio"]').valid();  // <- re-validate every radio input
    });
    
  • 当任何radio 输入改变时触发。立即重新评估整个表单。

    $('#myform input[type="radio"]').on('change', function() {
        $('#myform').valid();  // <- re-validate this entire form
    });
    

【讨论】:

    【解决方案2】:

    为了记录,这是我为实现我所寻找的目标所做的 - 在“否”单选按钮单击事件中,我调用:

     var validator = $("form").validate();
     validator.element("#textboxName");
    

    这将验证输入并删除验证消息。我在文档here 中找到了这个解决方案。

    【讨论】:

    • FWIW, the .valid() method 用更少的代码做同样的事情:$("#textboxName").valid()
    • 将它包裹在一个 jQuery .each() 中,你可以在三行中遍历所有 radio 元素。否则,将其附加到表单并在一行中完成。 $('myform').valid()
    • 如果您发布带有示例的答案,我很乐意接受。感谢您的所有帮助。
    • 我的错误,.valid() 的所有 jQuery Validate 方法除了都需要.each()。已发布答案。
    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多