【问题标题】:jQuery select box validationjQuery选择框验证
【发布时间】:2013-02-15 14:29:38
【问题描述】:

我在 jQuery 中有以下代码。
select 元素的选项值为“0”时,我需要显示验证消息“需要年份”。

<script type="text/javascript">
$(document).ready(function () {
   $("#register").validate({
       debug: true,
       rules: {
           year: {
               required: function () {
                   if ($("#year option[value='0']")) {
                       return true;
                   } else {
                       return false;
                   }
               }
           }
       },
       messages: {
           year: "Year Required",
       },
   });
})
</script>

选择框

<select name="year"  id="year">
    <option value="0">Year</option>
    <option value="1">1919</option>
    <option value="2">1920</option>
    <option value="3">1921</option>
    <option value="4">1922</option>
</select>

【问题讨论】:

  • if($('#year option:selected').val() == "0")
  • 这些额外的逗号是拼写错误还是错误?
  • @wolvern 谢谢......但它不起作用。我已经用 IE 检查了它,但在编码中没有显示任何错误..有什么想法吗?
  • 请不要重复发布,尤其是当其他人已经发布了试图帮助您的答案时:jQuery select box validations with Validate plugin

标签: jquery jquery-validate


【解决方案1】:

由于您无法在第一个 option 中设置 value="",因此您需要使用 the built-in addMethod() method 创建自己的规则。

jQuery

$(document).ready(function () {

    $('#myform').validate({ // initialize the plugin
        rules: {
            year: {
                selectcheck: true
            }
        }
    });

    jQuery.validator.addMethod('selectcheck', function (value) {
        return (value != '0');
    }, "year required");

});

HTML

<select name="year">
    <option value="0">Year</option>
    <option value="1">1955</option>
    <option value="2">1956</option>
</select>

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


原答案:(仅当您可以在第一个option 内设置value=""

要使用 jQuery Validate 插件正确验证 select 元素,只需要第一个 option 包含 value=""。所以从value="0" 中删除0 并修复它。

jQuery

$(document).ready(function () {

    $('#myform').validate({ // initialize the plugin
        rules: {
            year: {
                required: true,
            }
        }
    });

});

HTML

<select name="year">
    <option value="">Year</option>
    <option value="1">1955</option>
    <option value="2">1956</option>
</select>

演示:http://jsfiddle.net/XGtEr/

【讨论】:

  • 谢谢 Sparky .. 它现在开始工作了。是的,我知道第二个选项,但我不能从选项值中扣除零。你能解释一下这个jsfiddle有什么用吗?
  • @Tom,我在答案中留下了两个选项,以便其他读者了解两者之间的区别。
  • 一些旧浏览器不支持Jquery?如果是这样,我们还需要添加服务器端验证以及客户端脚本?
  • @Tom,进行服务器端验证是保护您的数据库和服务器的备份,因为可以绕过 JavaScript 验证。它与支持旧浏览器无关。
  • @Sparkey 。是的,我的意思是如果 Javascript 验证或 jquery 可能无法工作是一些旧的浏览器,它可以被绕过,那么服务器端验证是不可避免的吗?我们还需要添加服务器端验证是否严格?
【解决方案2】:

要将要求规则放在选择列表中,您只需要一个具有空值的选项

<option value="">Year</option>

那么只需要自己申请就够了

<script>
    $(function () {
        $("form").validate();
    });
</script>

有形式

<form>
<select name="year" id="year" class="required">
    <option value="">Year</option>
    <option value="1">1919</option>
    <option value="2">1920</option>
    <option value="3">1921</option>
    <option value="4">1922</option>
</select>
<input type="submit" />
</form>

fiddle is here

【讨论】:

  • 谢谢 .. 使用空值可以正常工作。但我不能在我的程序中使用空值,因为它是从数组中显示的。添加空值只需要使用 required:true :)
  • @Tom,你应该在你的 OP 中提到这一点,你也应该有礼貌地处理人们已经在你的其他问题上发布的答案:stackoverflow.com/questions/14889736/…
  • @Tom 你可以在这种情况下使用规则 {min:1},不需要自定义规则
  • 与 select2 插件一起使用时,它没有聚焦正确的元素?为什么
【解决方案3】:

http://docs.jquery.com/Plugins/Validation/Methods/required

如下编辑“选择”的代码,以检查选择列表中的 0 或空值选择

case 'select':
var options = $("option:selected", element);
return (options[0].value != 0 && options.length > 0 && options[0].value != '') && (element.type == "select-multiple" || ($.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);

【讨论】:

    【解决方案4】:

    Jquery Select Box Validation.You 可以根据您的要求通过警报或将消息放入 Div 中的警报消息。

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="message"></div>
    <form method="post">
    <select name="year"  id="year">
        <option value="0">Year</option>
        <option value="1">1919</option>
        <option value="2">1920</option>
        <option value="3">1921</option>
        <option value="4">1922</option>
    </select>
    <button id="clickme">Click</button>
    </form>
    <script>
    $("#clickme").click(function(){
    
    if( $("#year option:selected").val()=='0'){
    
    alert("Please select one option at least");
    
      $("#message").html("Select At least one option");
    
    }
    
    
    });
    
    </script>

    【讨论】:

    • 代码示例很好,但我建议添加一些关于需要做什么的描述,否则答案可能会被标记为质量非常低的答案。
    • 该代码用于验证所定义的选择框。消息有两种类型,一种是警报,另一种是在 Div 中打印。如果您需要更多说明,请告诉我。谢谢
    • 我的意思是把描述和你的帖子放在一起。因此,以后阅读它的人也会阅读描述。
    • 添加说明。谢谢
    【解决方案5】:

    稍微简化一下,修复一些逗号问题,这会炸毁一些浏览器:

      $(document).ready(function () {
           $("#register").validate({
               debug: true,
               rules: {
                   year: {
                       required: function () {
                           return ($("#year option:selected").val() == "0");
                       }
                   }
               },
               messages: {
                   year: "Year Required"
               }
           });
       });
    

    跳到一个假设,你的选择是否应该没有这个属性validate="required:true"

    【讨论】:

    • @MarkThanks.. 编码似乎没有错误,但它没有产生正确的输出(没有输出)。
    • 我想我们需要知道您正在使用的确切验证插件。
    • 它被标记为这样,但我修正了标题以使其更清晰。
    • @ Mark .Not working.. 你能告诉它哪个可用的插件最适合它。我不知道我正在使用的确切插件的名称
    • 马克舒尔泰斯和斯帕基。以这种方式 设置时,它工作正常。我认为我们一年中的 function() 不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多