【问题标题】:JQuery Validate select element not including default valueJQuery验证选择元素不包括默认值
【发布时间】:2018-09-28 13:25:17
【问题描述】:

我正在尝试验证 Select 元素,如下所示:

<select name="block_name" id="block-name">
 <option value="">Select Block</option>
 <option value="blockA">Block A</option>
 <option value="blockB">Block B</option>
</select>

如果规则如下,通常不会有问题:

rules: {
 block_name: {
   required: true
 }
}

我只想将class="required" 添加到选择元素中。 但我在规则中使用如下函数:

rules: {
 block_name  {
  required: function(element) {
   return $("#blocks").val() >= 2;
        }
    }
}

它使用以下隐藏字段,该隐藏字段具有确定值的数据绑定:

<input type="hidden" name="blocks" id="blocks" value="<?php echo $row_rsCurrentUser['blocks']; ?>">

rule 中使用此功能时,class="required" 不起作用,因此默认选项元素 &lt;option value=""&gt;Select Block&lt;/option&gt; 除外

我怎样才能让这个验证但除了默认选项作为选择之外?

提前致谢

【问题讨论】:

  • 可以在输入框添加required属性而不是类。
  • 我不确定我是否理解您的回答@Shahaji Deshmukh。我不是要验证输入框。
  • 请看here好吗?和你想要的一样吗?
  • 我不明白这个问题。 class="required" 和规则有什么关系?
  • 对不起@Barmar 我的帖子可能不清楚。我的意思是我将使用 required 类而不是验证选择元素的规则,而不是 option 的空白值

标签: jquery jquery-validate


【解决方案1】:

我认为你可以定义一个新的类规则,而不是使用内置的class="required"

$.validator.addClassRules("required_block2", {
    required: function(element) {
        return $("#blocks").val() >= 2;
    }
});

然后在这些元素上使用class="required_block2"

【讨论】:

  • addClassRules 用于创建复合规则。否则,您可以使用 addMethod 创建自定义规则,并使用类直接分配它。例如:创建一个名为 myRule 的自定义方法并使用 class=“myRule” 进行分配
  • @Sparky 使用addClassRules 的优势似乎是您可以轻松引用现有规则。虽然它通常用于创建组合多个规则的规则,但它很容易扩展到具有这样一个参数的一个规则的退化情况。
  • 抱歉,对此@Barmar 的回复晚了。这很好用,非常感谢
【解决方案2】:

您可以在函数中添加各种验证:

$("#myform").validate({
  debug: true,
  rules: {
    block_name:  {
      depends: function(element) {
        var blocksIsValid = (Number($("#blocks").val()) >= 2);
        var block_nameIsValid = ($("#block_name").val() !== "");
        $('#output').text('#blocksIsValid:'+blocksIsValid+', #block_nameIsValid: '+block_nameIsValid);
        return blocksIsValid && block_nameIsValid;
      }
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>

<form id="myform">
  <select name="block_name" id="block_name" required>
    <option value="">Select Block</option>
    <option value="blockA">Block A</option>
    <option value="blockB">Block B</option>
  </select>
  <input id="blocks" name="blocks" value=""/>
  <input type="submit" value="Validate"/>
  <p id="output"></p>
</form>

如果你对JS条件不熟悉,这里有几点提示:

||(与 OR 相同)至少有一个条件为真;

&amp;&amp;(与 AND 相同)所有条件都必须为真。

使用!(与 NOT 相同)您的条件将被翻转(true 变为 false,false 变为 true)。

阅读更多https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/conditionals

【讨论】:

  • 我不明白这个。 required 规则告诉它检查输入是否为空。在条件中检查输入本身是否应该启用规则有什么意义?
  • 也许你可以使用这样的东西: Condition 1 = ($("#blocks").val() >= 2) ... Condition 2 = ($("#block-name" ).val() !== "")。你需要它们都有效,所以:条件 1 && 条件 2。试试答案上的代码,我已经更新了。
  • “没用” - 你是什么意思?有一个错误?验证没有按预期工作?我需要更多信息来帮助你。
  • 您是否删除了option id?因为这段代码$("#block-name").val() !== "" 不允许空值,但它需要id。我要在这里构建一个完整的演示 codepen.io/rafaelcastrocouto/details/OBVaLx
  • 感谢您对此@rafaelcastrocouto 的意见。很难选择使用哪个选项。我接受了 Barmar 的建议,因为我觉得这是一种更清洁的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2015-08-09
相关资源
最近更新 更多