【问题标题】:jQuery Validate and disabled input fieldjQuery 验证和禁用输入字段
【发布时间】:2016-04-11 18:47:35
【问题描述】:

我使用下面的引导程序作为下拉选择器,然后使用关联的 jQuery 函数在inputtype="text" 中显示选择的字段。但是用户仍然可以在输入字段中编写自己的内容,我想避免这种情况。我尝试在输入字段上使用disabled 属性,但如果我这样做,jQuery Validate 插件将忽略它并授予权限,即使它是空的。

是否可以在不使用disabled 属性的情况下使用type="text"“停用”输入字段,以便我仍然可以使用jQuery Validate。

<div class="form-group">
    <div class="input-group">
         <div class="input-group-btn">
              <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Choose<span class="caret"></span></button>
              <ul class="dropdown-menu">
                  <li><a href="#" id="a">1</a></li>
                  <li><a href="#" id="b">2</a></li>
                  <li><a href="#" id="c">3</a></li>
                  <li><a href="#" id="d">4</a></li>
                  <li role="separator" class="divider"></li>
                  <li><a href="#" id="e">5</a></li>
              </ul>
         </div>
         <input type="text" id="abc" autocomplete="off" name="abc" placeholder="Select *" class="form-control" aria-label="...">
    </div>  
</div>

【问题讨论】:

  • 那么相关的 JavaScript 在哪里?

标签: javascript jquery twitter-bootstrap jquery-validate


【解决方案1】:

没有直接的解决方案...如果该字段通过disabled 属性“禁用”,jQuery Validate 插件将始终忽略它。 (从逻辑上讲,验证用户无法编辑的内容是没有意义的。)

但是有一个解决方法。如果您使用readonly 属性而不是disabled,则可以对其进行验证。

<input type="text" name="abc" readonly="readonly" />

演示:http://jsfiddle.net/85pu1oe5/

【讨论】:

    【解决方案2】:

    看来你需要使用readonly="readonly"属性http://www.w3schools.com/tags/att_input_readonly.asp

    【讨论】:

      【解决方案3】:

      无论这个问题多么奇怪 - 有一个非常简单的解决方法。为什么不在 jquery.validate.js 忽略的禁用字段之外使用隐藏字段?

      例如

      <input type="text" name="name" class="form-control" value="<?php echo htmlentities($user['name']); ?>" disabled>
      <input type="hidden" name="name" class="form-control" value="<?php echo htmlentities($user['name']); ?>">
      

      对我来说效果很好。

      也是一样
      <select style="display:none;"><option value="sample">Sample</option></select>
      

      显示:无;将完全隐藏元素(空间和所有)。它仍处于启用状态,因此仍会发送其数据。试一试。

      确保将“.ignore”添加到 validate.js 中,因为它启用了所有隐藏字段。

      【讨论】:

        【解决方案4】:

        最好的办法是依靠validator.showErrors() 方法并手动验证这个禁用的输入。

        当我需要验证条款复选框时,我遇到了类似的情况,但它被设计为在用户滚动浏览条款文本之前被禁用。 这就是我最后想到的:

                var message = "You must accept the Terms and Conditions in order to proceed with registration";
                var termsValidator = $('#step-5 form').validate({
                    rules: {
                        acceptTnC: "required"
                    },
                    messages: {
                        acceptTnC: message
                    },
                    submitHandler : function (form) {
                        // Need to manually validate, cause checkbox is disabled by default and validation
                        // skips disabled fields
                        if(!form.acceptTnC.checked) {
                            termsValidator.showErrors({
                                acceptTnC: message
                            })
                        }
                        else {
                            submitForm();
                        }
                    }
                });
                $('[name="acceptTnC"]').on('change', function (e) {
                    termsValidator.element(e.target);
                })
        

        启用复选框后,底部对于切换错误消息很重要,用户可以单击它打开或关闭

        【讨论】:

          猜你喜欢
          • 2016-08-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-24
          • 2015-09-20
          • 2018-11-10
          • 1970-01-01
          • 2011-04-16
          相关资源
          最近更新 更多