【问题标题】:Conflicts of blur and submit/click events模糊和提交/点击事件的冲突
【发布时间】:2014-06-21 16:32:14
【问题描述】:

我有两件物品

item1 是文本框

item2是提交按钮

现在 item1 在 jquery 中有 blur 事件。在那个模糊事件中,我进行了验证,如果验证失败,用户将收到确认消息。

所以如果用户按下是,他可以继续前进

如果用户按否,该文本框将是空白的,需要再次输入详细信息。

所以现在我的问题是,如果用户在 item1 中输入详细信息并直接单击 item2,则 按钮的提交事件被拒绝,并且 item1 的模糊事件被调用。所以第一次被拒绝,用户必须按第二次按钮(这是问题)。

如果用户点击 item2,如何在 item1 的模糊事件中知道,然后我可以继续触发 item2 的点击事件。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

考虑这段代码

var $item1 = $('#item1');
var $item2 = $('#item2');
$item1.on('blur', function (oEvent) {
    if ($item2.is(oEvent.relatedTarget)) {
        // your blur is caused by click on $item2 a.k.a submit button
    } else {
        // your blur is caused by smth else
    }
});

它检查您的焦点移动到哪里,您可以添加一些特定的布尔标志以供稍后在您的提交处理程序中使用,或者可能以某种方式更改您的验证。

请注意,模糊事件是失去焦点的事件,焦点不仅会因为点击而消失,还可能因为标签导航等原因。

更新:
添加了一个 jsfiddle http://jsfiddle.net/DbjQc/ 尝试聚焦文本输入,然后单击其他位置。之后尝试再次聚焦文本输入,然后单击提交按钮 - 您将看到行为如何变化。

【讨论】:

  • oEvent.relatedTarget 始终返回 null。根本原因应该是什么?
  • @commit,让我检查一下
  • @commit,我刚刚在 jsfiddle 中检查了它并且它有效 - 请在我的答案中找到链接
  • 安东,很好的解决方案! relatedTarget 是事件的一个很酷的属性,不知道它。谢谢!
  • @ProstoTrader,刚刚失去鼠标的对象,如果适用的话。请参阅developer.mozilla.org/en-US/docs/Web/Reference/Events/mouseover 但此主题与此问题或答案无关。
猜你喜欢
  • 2011-11-14
  • 1970-01-01
  • 2022-08-15
  • 2011-10-19
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2012-03-09
  • 2013-04-20
相关资源
最近更新 更多