jQuery 验证并禁用输入字段
jQuery Validate and disabled input field
我在下面使用 bootstrap 作为下拉选择器,然后与关联的 jQuery 函数一起显示 input
type="text"
中选择的字段。但是用户仍然可以在输入字段中编写自己的内容,我想避免这种情况。我尝试在输入字段上使用 disabled
属性,但如果我这样做,jQuery Validate 插件将忽略它并授予权限,即使它是空的。
是否可以 "deactivate" 使用 type="text"
的输入字段,而不使用 disabled
属性,这样我仍然可以使用 jQuery 验证。
<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>
看来您需要使用 readonly="readonly"
属性 http://www.w3schools.com/tags/att_input_readonly.asp
没有直接的解决方案...如果字段是 "disabled" 通过 disabled
属性,jQuery 验证插件将始终忽略它。 (从逻辑上讲,验证用户无法编辑的内容毫无意义。)
但是有一个解决方法。如果您使用 readonly
属性而不是 disabled
,它可以被验证。
<input type="text" name="abc" readonly="readonly" />
无论这个问题多么奇怪 - 都有一个非常简单的解决方法。为什么不在 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>
显示:none;将完全隐藏元素(space 和全部)。它仍处于启用状态,因此仍会发送其数据。试一试。
确保忽略:“.ignore”已添加到 validate.js,因为它会启用所有隐藏字段。
您最好的选择是依靠 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);
})
启用复选框后,底部部分对于切换错误消息很重要,用户可以单击它打开或关闭
我在下面使用 bootstrap 作为下拉选择器,然后与关联的 jQuery 函数一起显示 input
type="text"
中选择的字段。但是用户仍然可以在输入字段中编写自己的内容,我想避免这种情况。我尝试在输入字段上使用 disabled
属性,但如果我这样做,jQuery Validate 插件将忽略它并授予权限,即使它是空的。
是否可以 "deactivate" 使用 type="text"
的输入字段,而不使用 disabled
属性,这样我仍然可以使用 jQuery 验证。
<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>
看来您需要使用 readonly="readonly"
属性 http://www.w3schools.com/tags/att_input_readonly.asp
没有直接的解决方案...如果字段是 "disabled" 通过 disabled
属性,jQuery 验证插件将始终忽略它。 (从逻辑上讲,验证用户无法编辑的内容毫无意义。)
但是有一个解决方法。如果您使用 readonly
属性而不是 disabled
,它可以被验证。
<input type="text" name="abc" readonly="readonly" />
无论这个问题多么奇怪 - 都有一个非常简单的解决方法。为什么不在 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>
显示:none;将完全隐藏元素(space 和全部)。它仍处于启用状态,因此仍会发送其数据。试一试。
确保忽略:“.ignore”已添加到 validate.js,因为它会启用所有隐藏字段。
您最好的选择是依靠 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);
})
启用复选框后,底部部分对于切换错误消息很重要,用户可以单击它打开或关闭