【问题标题】:How to validate dropdown fields in jquery如何验证jquery中的下拉字段
【发布时间】:2012-08-01 19:23:54
【问题描述】:

我有一个隐藏类型文本框。我刚刚获得了文本框的名称并将其设置为下拉列表的 id。

现在我需要验证下拉菜单。这就是我所做的。

     <input type="hidden" value="100" name="test1_season_1">

    $('input[value="100"][type="hidden"]').each(function(){
         myString = $(this).attr('name');

         $("#formId").validate({
            rules: {
                myString: "required",
                },
             messages: {
                 mystring: "<br>Please select from dropdown.",       
             }
         });
    });

但没有显示验证消息。

所以我直接给了文本框名称并检查验证,这次它有效。

         $("#formId").validate({
            rules: {
                test1_season_1: "required",
                },
             messages: {
                 test1_season_1: "<br>Please select from dropdown.",       
             }
         });

我的问题是,每次都会动态生成文本框名称,所以不能直接给。如果存在两个隐藏类型文本框,我必须生成两个下拉列表。

请帮帮我不要这个。

提前致谢。

【问题讨论】:

    标签: jquery


    【解决方案1】:

    在初始化对象时,您不能将变量的值用作设置属性的键(无论如何都是这样)。初始化对象的语法将接受不带引号的键,因此您实际上是在使用键 myString 创建一个属性,而您想要创建一个键为您的值的属性 myString变量。

    请尝试以下方法:

    myString = $(this).attr('name');
    alert(correctString); // not entirely sure about this line - where does correctString come from?
    
    var rules = {};
    rules[myString] = "required";
    
    var messages = {};
    messages[myString] = "<br>Please select from dropdown.";
    
    $("#formId").validate({
        rules: rules,
        messages: messages
    });
    

    您可以创建两个包含所有规则和消息的对象,而不是为每个隐藏的输入调用 .validate(),然后调用 .validate() 一次:

    var rules = {};
    var messages = {};
    
    $('input[value="100"][type="hidden"]').each(function() {
        myString = $(this).attr('name');
        rules[myString] = 'required';
        messages[myString] = '<br>Please select from dropdown.';
    });
    
    $("#formId").validate({
        rules: rules,
        messages: messages
    });
    

    【讨论】:

    • 感谢您的帮助(请忽略警报(正确字符串);)。如果只有一个下拉菜单,上面的代码可以正常工作,但如果有两个下拉菜单,则错误消息仅显示一个下拉菜单。
    • @saran 我首先要看的是在一个元素上多次调用.validate() 是否会覆盖之前调用设置的规则。由于我自己不使用任何验证插件,或者具体知道您正在使用哪个插件(指向您特定插件的文档的链接会很有用),所以我无法为您提供更多帮助。
    • 插件版本为jQuery验证插件1.5.5
    • @saran 我已经编辑了答案以包含一个额外的代码,它一次调用.validate();我不确定这是否会有所帮助,但可能值得一试。
    【解决方案2】:

    给输入一个class 并使用类规则

    $.validator.addClassRules("myvalidator", { 
       required: true, 
       message: "<br>Please select from dropdown." 
    });
    
    <input type="hidden" value="100" class="myvalidator" name="test1_season_2">
    <input type="hidden" value="100" class="myvalidator" name="test1_season_3">
    <input type="hidden" value="100" class="myvalidator" name="test1_season_999">
    

    Docs for addClassRules here

    【讨论】:

      猜你喜欢
      • 2015-12-29
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 2012-01-02
      • 2012-07-21
      • 1970-01-01
      相关资源
      最近更新 更多