验证后是否有更简单的方法来获取(第一个无效的)Parsley.js focusedField元素?
我的代码可以使用,但我正在寻找一种更简单/更好的方法来检索该元素。
发生form:error
时,Parsley formInstance._focusedField
对象包含此信息,但console.log(formInstance._focusedField)
始终返回undefined
。
我的问题:我有一些语义ui下拉列表(样式选择框)没有接收焦点(),因为它们是隐藏的。 (即如果选择被隐藏,表单不会跳转到第一个错误字段)
每个ui下拉菜单自动生成一个用于用户搜索的输入元素,因此如果元素is('select:hidden')
,我会关注下一个最接近的输入。
对于此示例,我在表单上设置了data-parsley-focus="none"
。
window.Parsley.on('form:error', function(formInstance) {
for (var i = 0; i < formInstance.fields.length; i++) {
var field = formInstance.fields[i];
if (true !== field.validationResult && field.validationResult.length > 0 && 'undefined' === typeof field.options.noFocus) {
var focusedField = field.$element;
if ($(focusedField).is('select:hidden')) {
$(focusedField).parent().find('input').focus();
} else {
$(focusedField).focus();
}
\\focus on first invalid element
break;
}
}
});
答案 0 :(得分:1)
直接回答:
您可以收听form:validate
并清除变量firstField
,并在field:error
上设置该变量(如果尚未设置)。
更好的回答:
实际问题是隐藏字段上的focus()
无法正常工作。我建议你修复那个而不是黑客parsley
...找到这些隐藏的输入,在它们上面听focus
和&#34;重定向&#34;正确的焦点。
最终答案:
为每个人解决问题。由于语义UI用不同的UI元素替换输入,所以它是有意义的(至少在我的脑海中),如果它自己进行了焦点重定向...如果你做PR,请告诉我,我要+ 1它!