验证后是否有更简单的方法来获取(第一个)Parsley.js focusedField元素?

时间:2015-11-03 18:06:59

标签: parsley.js

验证后是否有更简单的方法来获取(第一个无效的)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;
        }
    }

});

1 个答案:

答案 0 :(得分:1)

直接回答

您可以收听form:validate并清除变量firstField,并在field:error上设置该变量(如果尚未设置)。

更好的回答

实际问题是隐藏字段上的focus()无法正常工作。我建议你修复那个而不是黑客parsley ...找到这些隐藏的输入,在它们上面听focus和&#34;重定向&#34;正确的焦点。

最终答案

为每个人解决问题。由于语义UI用不同的UI元素替换输入,所以它是有意义的(至少在我的脑海中),如果它自己进行了焦点重定向...如果你做PR,请告诉我,我要+ 1它!