【问题标题】:jQuery: How to fire onclick first before onblur?jQuery:如何在 onblur 之前先触发 onclick?
【发布时间】:2011-06-23 03:17:27
【问题描述】:

如果我当前专注于 jQuery 中的文本框,如何在 onblur 事件之前触发 onclick 事件?

预期输出:在 texbox 中的模糊事件之前首先触发按钮单击事件。警报“mybtn onclick 警报”

演示: http://jsfiddle.net/Zk8Fg/

代码:

<input type="text" name="fname" id="fname" value="" /><br />
<input type="button" name="mybtn" id="mybtn" value="Click Me" />

<script language="javascript">
$(document).ready(function() {
    myFunc();
});

function myFunc() {
    $('#fname').focus().blur(function() {
        alert('fname onblur alert'); 
    });

    $('#mybtn').click(function() {
        alert('mybtn onclick alert'); 
    });
}
</script>

谢谢:)

【问题讨论】:

  • 你想用$.focus().blur()做什么?
  • 我能问一下您为什么和/或您要做什么吗?也许有人可以提出一些替代方案? UI 事件的发生是一定的,我认为它不能改变。
  • @Jonathan:我对当前集中在文本框上的模糊事件进行了验证,但模糊情况是,一旦我点击按钮,然后模糊事件比点击事件首先触发。

标签: jquery javascript-events


【解决方案1】:

嗯,它可能是首先触发事件的标准的一部分,因此您可能不应该更改顺序。不过,您可以做的是使用 window.setTimeout 将结果操作推迟一小段时间。

$('#fname').focus().blur(function() {
    window.setTimeout(function(){alert('fname onblur alert')},0.1); 
});

不过,我同意其他 cmets 的观点,看起来您确实应该重新考虑如何处理此问题,因为重新排序默认事件让我觉得这是一个蹩脚的黑客,可能有更优雅的解决方案。

【讨论】:

  • 谢谢@SpliFF。这是最好的答案。 :)
【解决方案2】:

如果输入字段当前处于焦点状态,则在不首先模糊当前焦点的情况下,您无法将注意力集中在另一个元素上。无论您尝试做什么,都可能有更好的方法。

可见的事件记录:http://jsfiddle.net/Zk8Fg/3/

【讨论】:

  • 所以不可能?也许有解决方法?谢谢
  • @marknt15 不可能偏离标准事件顺序,但这并不意味着不可能实现您想要做的事情。让我们知道您想完成什么,我们会尽力提供帮助。
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多