【问题标题】:Jquery Validate Focus to Hidden field on invalidJquery Validate Focus to Hidden field on invalid
【发布时间】:2014-01-15 22:23:43
【问题描述】:

使用 jquery validate 验证隐藏字段,因为使用了 typeahead(在选择上设置隐藏字段)和 rateit 插件(在选择上设置隐藏字段)

他们验证正常,我的错误消息显示和清除正确。

问题在于,如果其中一个字段是第一个无效字段,则它不会聚焦,因为该元素是隐藏的。

有人知道解决这个问题的方法吗?

谢谢

【问题讨论】:

  • 嗯...是的。我知道它是隐藏的,但它与上述表单上显示的实际字段有关。所以有一个地方可以集中验证只是不知道。

标签: jquery jquery-validate


【解决方案1】:

最终以这种方式进行,并且运行良好。我在隐藏的输入中添加了一个属性

例如:

<input name='whatever" class="required" focusID="ID_TO_FOCUSTO" value="">

然后添加这个来验证。如果它是可见的,它只是像平常一样专注于那个元素。如果不是,则将焦点集中在隐藏输入上的属性 focusID 的 ID。

    invalidHandler: function(form, validator) {
        var errors = validator.numberOfInvalids();
        if (errors) {
            if($(validator.errorList[0].element).is(":visible"))
            {
                $('html, body').animate({
                    scrollTop: $(validator.errorList[0].element).offset().top
                }, 1000);
            }
            else
            {
                $('html, body').animate({
                    scrollTop: $("#" + $(validator.errorList[0].element).attr("focusID")).offset().top
                }, 1000);
            }
        }
    }

【讨论】:

  • 最好不要将无效属性放入标记中,但更喜欢滚动到.errorList[0].element 附近的任何元素。不过值得一票。
【解决方案2】:

您可以为 Typeahead 字段执行自定义规则,验证包含 id 值的隐藏字段。因此,如果它无效,焦点将放在 typeahead 字段上。

    jQuery.validator.addMethod("myCustomValidate", function() {
        //check if hidden field has a value
        return $("#hiddenFieldId").value);
    }, "You must be select a item");


$('validatorElement').validate({
    ignore: "",
    rules : {
        typeaheadElement: { myCustomValidate: true }
    }
});

【讨论】:

  • 谢谢。确实为 typeahead 工作,但最终使用下面的解决方案来为 typeahead 和 rateit 工作。
  • 仅供参考,上面的代码中存在语法错误。试图建议编辑,但由于某种原因被拒绝。 return $("#hiddenFieldId").value) 应该是 return $("#hiddenFieldId").val()
猜你喜欢
  • 2016-03-05
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 2022-11-20
  • 2022-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多