停止jQuery表单验证重置由其他JavaScript填充的typeahead.js输入字段
Stop jQuery form validation resetting typeahead.js input field that is populated by other JavaScript
我使用jQuery Validator在提交之前需要一个文本输入字段。表单的工作原理如下:
- 在页面加载时,JavaScript函数会尝试进行地理定位
- 当地理定位成功时,将填充输入字段(除非用户已经填充)
当用户在地理定位成功之前以及在输入字段中输入任何内容之前单击提交时,我看到了一个问题。表单无法正确验证,但当地理定位成功并成功填充输入字段(并且表单重新验证成功)时,如果用户随后单击提交,则输入字段将重置为空,验证失败。
我看不出是什么原因导致字段被重置。它是jQuery验证器吗?如何在重新提交时阻止它被重置?
这是相关代码:
表单(已删除样式):
<form action='/find' id='search-form' method='post' role='form'>
<select id='what' name='what'>
<option>...</option>
</select>
<input id='where' name='where' type='text'>
<button id='search-form-submit' type='submit'>Search</button>
</form>
jQuery代码:
jQuery.validator.setDefaults({
success: "valid"
});
$('#search-form').validate({
rules: {
where: {
required: true
}
},
highlight: function(element) {
$(element).addClass('error');
},
success: function(element) {
$(element).removeClass('error');
},
errorPlacement: function(){
return false;
}
});
在地理定位成功时,执行以下操作:
if (!document.getElementById('where').value) { // if user hasn't typed anything yet...
document.getElementById('where').value = postcode; // populate with the geolocated postcode
var validator = $('#search-form').validate();
validator.element("#where"); // revalidate the form field (this works)
}
报价标题:
"停止jQuery表单验证重置由其他JavaScript填充的typeahead.js输入字段"
这个问题的前提是有缺陷的jQueryValidate插件中没有任何内容可以更改数据输入字段的值这取决于用户或代码中的其他地方。
报价OP:
"我看不出是什么原因导致字段重置。"
我也不能。也许它不在你提供的代码中。否则,这是您展示的唯一一件会改变输入字段值的事情。。。
document.getElementById('where').value = postcode;
旁注:
1) unhighlight
回调函数是对highlight
函数的补充,而不是success
。success
回调通常用于在"有效"字段上操作通常隐藏的错误label
,例如显示复选标记。
你的代码应该更像这样。。。
highlight: function(element) {
$(element).addClass('error');
},
unhighlight: function(element) {
$(element).removeClass('error');
},
2) 而不是所有这些。。。
var validator = $('#search-form').validate();
validator.element("#where");
只需使用.valid()
方法。。。
$('#where').valid();
.valid()
演示:http://jsfiddle.net/LrS32/
事实证明,这是由typeahead.js引起的,我不认为这是相关的(尽管现在已经完全清楚了)。
解决方案似乎是在更新输入字段值时设置typeahead.js查询,在本例中为:
$('#where').typeahead('setQuery', postcode);
我有一段时间对此感到头疼,所以我希望其他人会觉得这很有帮助。
- 如何设置html元素填充的动画
- 如何使用jquery在填充自动完成的值后使文本框只读
- 如何通过ajax刷新JSF填充的javascript变量
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- 用与线条相同的颜色填充多折线图上的点
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 用我的json数据填充JQuery DataTable
- 使用 jQuery 检查所有值是否为空或已填充
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- Twitter引导程序Typeahead-Id&标签
- 对具有ui typeahead的对象中的值执行orderBy
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- 如何让typeahead在我的搜索栏中填充自定义参数
- 如何使用JSON字符串中的jQuery填充下拉框
- 动态填充两个下拉菜单
- 停止jQuery表单验证重置由其他JavaScript填充的typeahead.js输入字段
- 如何禁用typeahead:在远程typeahead.js中聚焦已填充的文本字段时处于活动状态
- 使用typeahead.js使用XML文件填充列表
- typeahead.js process()用未定义填充列表