【问题标题】:Deselecting a form input and waiting for a function before submitting取消选择表单输入并在提交前等待函数
【发布时间】:2010-06-02 19:54:19
【问题描述】:

我有一个带有输入字段的表单,用户可以在其中输入唯一标识符。然后,我有一些 jQuery 代码,当用户离开输入字段(模糊)时,它会出去并获取有关该部分的详细信息并填充页面上的一些字段。问题是如果用户在移出输入字段之前单击提交按钮,则 jQuery 代码永远没有机会加载数据并填充必要的字段。这样做的最佳方法是什么?我想过也许将焦点设置为正文,然后有一个无限循环,不断检查页面,直到所有应该填写的字段都被填写,但我觉得某种基于事件的解决方案会比不可预测的无限循环更好。有什么想法吗?

【问题讨论】:

    标签: javascript jquery forms submit infinite-loop


    【解决方案1】:

    给表单一个onsubmit 事件。

    除非正确填充所有表单字段,否则该事件返回 false

    jQuery:

    $("#formname").submit(function()
     { if (condition_not_met) return false; });
    

    这将阻止表单提交,直到一切就绪。

    阻塞在禁用 JavaScript 的情况下不起作用,但当您使用 Ajax 获取正确的字段时,这可能无关紧要。

    【讨论】:

    • 这是一种简单的解决方案。我考虑过这样做,但希望有一个稍微简化的解决方案,用户不必再次单击提交按钮。
    • @blcArmadillo easy:当不满足条件时,让我的函数从上面设置一个标志submitWhenPossible = true。让您的 Ajax 成功回调检查该标志,如果它设置为 true,则执行编程提交:$("#formname").submit(); 永远不要在 JS 中使用无限循环,它们可能会使您的用户浏览器崩溃。但是,延迟提交可能会导致混淆,因为用户习惯于在单击按钮时看到一些浏览器活动(颤抖启动、页面更改......)。不确定从这个角度来看这是否是一个好主意,但请尝试一下。
    【解决方案2】:

    我猜你正在模糊函数中进行 ajax 调用? 您能否禁用提交按钮(在页面加载或模糊时),然后在 ajax 回调中启用它?

    【讨论】:

      猜你喜欢
      • 2015-04-24
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      相关资源
      最近更新 更多