jquery .valid() 验证所有偏移量

jquery .valid() validating all offsets

我在提交时遇到 jquery 的 .valid() 函数的奇怪问题。 Jquery 自然会在提交时调用它,但我已经提取了 jquery 的确切函数调用,导致下面的问题

$("#validateMe").click(function () {
    alert($("form").valid());
});

这是一个问题的原因是它一直为每个输入调用偏移 width/offset 高度,包括我的复选框。

复选框由以下人员生成:

for (int i = 0; i < Model.CategoryViewModel.ChildCategoryNodes.Count(); i++)
{
    if (Model.CategoryViewModel.ChildCategoryNodes[i].Selected)
    {
        @Html.HiddenFor(model => model.CategoryViewModel.ChildCategoryNodes[i].PbMajor)
        @Html.HiddenFor(model => model.CategoryViewModel.ChildCategoryNodes[i].PbHeading)
        <label>
        @Html.CheckBoxFor(model => model.CategoryViewModel.ChildCategoryNodes[i].Selected, new Dictionary<string, object> { { "data-pbmajor", Model.CategoryViewModel.ChildCategoryNodes[i].PbMajor }, { "data-pbheading", Model.CategoryViewModel.ChildCategoryNodes[i].PbHeading } })
        @Model.CategoryViewModel.ChildCategoryNodes[i].PbMajor
        @Model.CategoryViewModel.ChildCategoryNodes[i].PbHeading
        </label>
    }
}

检查 offsetWidth 和 offsetHeight 形式的每个单独输入。通常,如果表单很小,这并不重要,但我有 < 2000 个复选框被加载到页面上。有这么多,虽然它在页面时间上给出了整体缓慢的用户体验。

任何解决方法或修复我的代码的答案都会有所帮助!

jQuery 以非常大的形式变慢而闻名。参见 jQuery validate large forms - script running slowly and Long form using jquery Validate causes IE slow script warning

你有几个选择。我会按以下顺序接近他们:

  • 自定义或覆盖 jQuery 的默认验证函数。上面的 2 个答案给出了一些例子,还有这个:Custom method with jQuery Validation plugin

  • 对表单进行分页。你真的需要在一个表单上有 ~2000 个复选框吗?有没有办法把它分成多个页面?

  • 在服务器端验证。如果您的应用程序逻辑支持它,即使无效也允许提交表单,运行 服务器端的验证逻辑,然后 return 包含任何验证消息的页面(如有必要)。