jQuery验证和禁用输入字段

时间:2016-04-11 18:47:35

标签: javascript jquery twitter-bootstrap jquery-validate

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

是否可以使用type="text"“停用”输入字段,而不使用disabled属性,这样我仍然可以使用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>

4 个答案:

答案 0 :(得分:12)

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

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

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

DEMO:http://jsfiddle.net/85pu1oe5/

答案 1 :(得分:2)

好像您需要使用readonly="readonly"属性http://www.w3schools.com/tags/att_input_readonly.asp

答案 2 :(得分:0)

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

e.g。

<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>

display:none;将完全隐藏元素(空间和所有)。它仍然启用,因此仍然会发送其数据。试一试。

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

答案 3 :(得分:0)

您最好的选择是依靠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);
        })

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