【问题标题】:How to trigger 'submit' event before the 'blur' event is triggered?如何在触发“模糊”事件之前触发“提交”事件?
【发布时间】:2015-10-05 15:17:01
【问题描述】:

我有一个包含错误消息的表单,如下例所示:

http://codepen.io/anon/pen/dYWyEM?editors=101

重现问题的步骤如下:

打开codepen链接后,

1) 关注输入字段

2) 按提交按钮

3) 由于先触发了 blur 事件,所以先隐藏了错误信息,从而改变了提交按钮的位置。因此点击事件根本没有注册,我需要再次点击提交表单。

有没有办法先发送提交事件?

不知何故,我需要检测触发模糊事件的目标。 似乎relatedTarget 使我们能够找出触发模糊事件的元素。但是,这在 Firefox 中不起作用。

有没有办法找出所有浏览器中的relatedTarget?

【问题讨论】:

  • 您可以简单地将错误消息的隐藏延迟大约 10 毫秒?
  • 您可以使用visibility: hidden 来代替display: none?不能真正回答您的问题,但它可以提供一种可能的解决方法。
  • 绑定一个关键事件/输入处理程序以在有效时删除消息
  • 只需使用这个:setTimeout(function(){ errorMsg.addClass('hidden'); },200) - 这可以解决您的问题。
  • @charlietfl 这对用户来说不是直观吗?你认为 200 毫秒的延迟会让他们认为他们填写的表格有误吗?人们甚至不会注意到跟踪您点击的每个链接会有 500 毫秒的延迟,更不用说在错误自行消失之前有 200 毫秒的延迟。

标签: javascript jquery forms javascript-events


【解决方案1】:

如果你的意图是对blur进行字段验证,你仍然需要一种方法来检查表单提交时是否有任何验证错误,以避免在出现验证错误时提交表单。

因此,我建议一种替代方法,而不是解决您的确切问题的解决方法/修复方法,因为我认为当前的模型一开始可能会很麻烦。

为什么不对表单提交执行所有字段验证而不是字段模糊,然后在任何字段出现验证错误时阻止提交?

【讨论】:

  • 在我的实现中,我正在验证submitblur 上的输入字段。我认为,仅在提交时验证输入字段并不是一个好的用户交互。不过,还是谢谢你的建议。
【解决方案2】:

根据this answer 中的内容,我提出了这个解决方案。监听mousedownblur之前触发的事件,根据错误信息是否可见,判断用户是否可以提交表单。

form.on('mousedown','input[type="submit"]', function(e) {
  if(!errorMsg.hasClass("hidden")){
    e.preventDefault();
    alert("Can't submit until the error message is gone");
  }
});

我已经更新了你的CodePen

【讨论】:

  • 我看到了类似的解决方法。现在,我正在挖掘更多以找到更好的解决方案。但是感谢您记录下来!
猜你喜欢
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多