如何让不显眼的 jquery 远程验证器执行异步..?

2024-05-03

在 MVC3 应用程序中,使用 jquery 不显眼的验证以及带有 [远程] 验证器的视图/模型:我试图在远程验证期间以及将有效表单提交到服务器时禁用提交按钮并显示等待图标。我以为我已经搞定了,直到我在 IE8 中尝试了它。

问题是,当表单无效时,GC 和 FF 不会触发表单的提交事件,因此我只是在此事件期间禁用了提交按钮。然而,当表单无效时,IE8 会触发此事件,导致用户永远无法再次单击它。 (IE8 不提交表单,但会触发该事件。)

我尝试将一个函数附加到提交按钮的单击事件。在那里,我禁用了提交按钮,显示了等待图标,并得到了以下内容:

$('[data-app-form-submit-button="true"]').live('click', function (e) {
    var form = $(this).parents('form');
    var icon = form.find('[data-app-form-submitting-icon="true"]');
    icon.show();
    $(this).attr('disabled', 'disabled');
    $.ajaxSetup({ async: false });
    var isValid = form.valid();
    $.ajaxSetup({ async: true });
    alert(isValid);
});

问题是,ajax 设置调用并没有真正关闭异步。如果我将其移出单击功能,它会执行此操作,但随后它会禁用所有内容的异步。相反,页面会立即发出“true”警报,这是通过在远程验证操作方法上设置断点进行测试的。

有任何想法吗?

附加说明:

我忘了提及,在 IE8 中,仅当相关文本框未通过客户端上可能发生的验证时才会触发提交事件。例如,如果必需的或正则表达式失败,则将触发 Submit()。对于远程验证操作方法,不会触发它。但是,一旦客户端验证失败,后续的远程验证也会触发 IE8 提交事件。

对 Russ Cam 的回应(评论#1)

这是视图模型中的相关代码:

public class SignUpForm : IValidatableObject
{
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email Address")]
    [Required(ErrorMessage = "Email Address is required.")]
    [RegularExpression(@"^(email regex here)$",
        ErrorMessage = "This is not a valid email address.")]
    [Remote("Validate", "ControllerName", "AreaName", HttpMethod = "POST")]
    public string EmailAddress { get; set; }

    public IEnumerable<ValidationResult> Validate(
        ValidationContext validationContext)
    {

我很高兴你让我看看渲染的<form>。表单标签和输入元素如下所示:

<form action="/post-action-method" method="post" novalidate="novalidate">
...
<input class="text-box single-line" data-app-focus="true" data-val="true" 
    data-val-regex="This is not a valid email address." 
    data-val-regex-pattern="^(email regex here)$" 
    data-val-remote="&amp;#39;Email Address&amp;#39; is invalid." 
    data-val-remote-additionalfields="*.EmailAddress" 
    data-val-remote-type="POST" 
    data-val-remote-url="/validate-action-method" 
    data-val-required="Email Address is required." 
    id="EmailAddress" name="EmailAddress" type="text" value=""> 
 ... 
<input type="submit" value="Submit this form" 
    data-app-form-submit-button="true" />

直到现在我才看到 novalidate="novalidate" 属性。 cshtml 文件中的内容如下:

@using (Html.BeginForm())
{
    @Html.EditorForModel()
    @Html.AntiForgeryToken("assault")
}

我还使用防伪令牌,如果这有什么区别的话。谢谢。


这有点老套,但我建议尝试以下方法。

首先,隐藏提交按钮display="none",并显示您自己的“提交”按钮,该按钮运行上面的脚本。

其次,在您的页面中添加一个标志 var [var remotePending = false;] 和一个变量setInterval call [var intervalPending;],并在脚本中将标志设置为 true,然后使用以下函数调用intervalPending = setInterval('remoteCheck()', 200);

function remoteCheck() {
    if ($.validator.pendingRequest == 0) {
        // requests are done
        // clear interval
        clearInterval(intervalPending);
        // re-enable our "submit" button

        // "click" the hidden button
        $("#hiddenSubmit").click();
    }
    // we will try again after the interval passes
}

这将允许您等待挂起的远程验证完成,然后正常继续。我还没有测试过,所以你可能需要尝试一下才能按你想要的方式工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让不显眼的 jquery 远程验证器执行异步..? 的相关文章

随机推荐

  • 第一次调用后 LiveData 未观察到

    我实现了 LiveData 和 ViewModel 来模仿 AsyncTaskLoader 我从 DCIM 中的相机目录加载文件名 然后附加一个 fileObserver 来观察删除文件 图片 时的情况 然后回调告诉 LiveData 在发
  • 如何在 C# 中创建真正不可变的双向链表?

    这更多的是一个理论问题 在 C 中是否可以通过任何方式创建一个真正不可变的双向链表 我认为一个问题在于两个相邻节点的相互依赖 我所说的 真正 是指使用只读字段 这可以通过棘手的构造函数逻辑来完成 例如 public sealed class
  • 从 Javascript 读取当前文档的大小

    我开始玩回旋镖 https github com yahoo boomerang用于测量性能 这是非常有前途的 虽然它允许我测量延迟 带宽和页面加载时间 但我也有兴趣尝试获取在服务器端渲染初始 HTML 页面所需的时间 虽然记录浏览器开始解
  • div表格中的单元格间距

    我希望每个单元之间有 4 个左右的像素空间 我希望灰色标题有空格而不是一块灰色 我尝试尝试 background clip padding box padding 14px margin等 但无法弄清楚如何在div表中的单元格之间放置一些像
  • mysql中更新查询中的多个set和where子句

    我认为这是不可能的 因为我找不到任何东西 但我想我会在这里检查一下 以防我没有寻找正确的东西 我的数据库中有一个设置表 其中有两列 第一列是设置名称 第二列是值 我需要同时更新所有这些 我想看看是否有一种方法可以在一个查询的同时更新这些值
  • 将项目子文件夹中的文件放入输出目录

    我想在 C 项目中创建一个文件夹来包含一些配置文件 但是 我不希望将这些文件复制到bin Release MyFolder 我宁愿将它们复制到bin Release直接地 我认为这可以通过拥有一个 虚拟 文件夹 例如解决方案文件夹 来实现
  • 当我删除 @synthesize 语句时出现编译器错误“使用未声明的标识符”

    在最新的 LLVM 版本中 综合属性的要求已被删除 因此我能够删除我所有的 synthesize声明 除了以下声明NSFetchedResultsController 有谁知道为什么当我删除时编译器会警告我 synthesize fetch
  • Rails:如何将替代 Accept: content-types 视为 JSON?

    到目前为止我已经找到了两种方法request format json 在 Rails 中为 true 即传入请求被视为 JSON 一种是如果您请求资源并以 json另一个是如果您提供标头Accept application json在你的要
  • 在java中使用自定义比较器在数组中搜索

    为什么总是返回49999无论strToSearch变量保持 即使使用 clank 搜索变量 它也会返回相同的结果 我是不是错过了什么 String arr new String 100000 String strToSearch 12 fo
  • 可以在delphi数据集中创建一个假数据字段吗?

    我想在 DataSet 不是 ClientDataSet 中创建一个 假 数据字段 该字段不应存储在数据库中 它不是计算字段 应允许用户输入输入数据 该字段具有业务逻辑含义 因此用户更新其值后应该更新其他字段 使用 OnFieldChang
  • 无法在 GAE 应用程序中使用 google-cloud

    我的 Google App Engine 应用程序中的以下行 webapp py 无法导入谷歌云 https googlecloudplatform github io google cloud python 图书馆 from google
  • 如何使用 web.xml 阻止 IP 地址?

    如何通过 web xml 上的某些配置来阻止 IP 地址 我需要过滤器吗 我该如何实施 你不能纯粹通过配置来做到这一点web xml 不 不过 Servlet 过滤器是实现此类功能的好地方 The Filter接口提供HttpServlet
  • 在巨大的数据集上创建独特的节点和关系 NEO4J

    我的问题与这个非常相似 如何通过neo4j中导入的csv文件创建独特的节点和关系 https stackoverflow com questions 25090255 how to create unique nodes and relat
  • 如何动态更改表格单元格文本颜色?

    我需要一个解决方案来通过 javascript 动态更改表格单元格的文本颜色 文本可以是以下颜色 蓝色 绿色 红色和黑色 表示例
  • 200 响应但未返回 JSON 数据 - Restangular 问题?

    使用 reangular 和存根 hub api 我可以在 Firefox RestClient 上点击此 API 并获取包含所有 JSON 数据的响应正文 但在我的应用程序中 我收到 200 但没有响应正文 内容长度甚至表明存在某些内容
  • java小程序paint方法麻烦

    在代码中我正在调用repaint 方法来自init 方法 但输出并不符合我的预期 我打了电话repaint 方法 10 次但它调用paint 仅一次 参见 O P 的屏幕截图 我有什么错误吗 请帮我 谢谢 code import java
  • 更改用户名 Github “您必须验证您的电子邮件地址” git Push 上出现 403 错误

    我最近在 github 上更改了我的用户名 以便所有内容都重定向到我用户名上的新 URL 我通过命令行收到此错误git push 您必须验证您的电子邮件地址 致命 请求 URL 返回错误 403 但是 github 不允许我在帐户 gt 设
  • 如何使用 Openpyxl 获取当前行索引

    我编写了一个 Python 脚本 从 json 文件中提取一些字符串值 将它们存储在某个字典中 并使用我第一次使用的 Openpyxl 将它们填充到 xlsx 文件中 简而言之 它看起来像这样 WORKBOOK Workbook WORKS
  • 如何用C#替换PDF中的文本?

    我在这里看到了很多解决方案 但没有一个是明确或好的答案 这是我的简单问题 希望得到直接答案 我有一个 PDF 文件 模板 其创建的文本如下 名字 姓氏 地址 电话号码 是否可以使用 C 代码将这些模板替换为我选择的文本 没有字段 没有其他复
  • 如何让不显眼的 jquery 远程验证器执行异步..?

    在 MVC3 应用程序中 使用 jquery 不显眼的验证以及带有 远程 验证器的视图 模型 我试图在远程验证期间以及将有效表单提交到服务器时禁用提交按钮并显示等待图标 我以为我已经搞定了 直到我在 IE8 中尝试了它 问题是 当表单无效时