3

只有在元素失去焦点后才会触发 focusout/blur 事件......顺便说一下,我更喜欢不使用插件来做到这一点。

4

2 回答 2

4

是的。你可以使用这个:

<input type="text" onblur="this.focus();" />

或者在 jQuery 中:

$(element).blur(function(){
    $(this).focus();
});
于 2013-02-09T07:51:53.487 回答
3

是的。

当您单击可聚焦的 DOM 元素(默认情况下可聚焦,或通过向其添加tabIndex属性使其可聚焦)时,它将首先收到一个"focus"事件,让您知道它即将获得焦点。

然而,在此之前,任何有焦点的东西都会收到一个"focusout"类型为 的事件FocusEvent。假设您的事件变量是e. 该e.relatedTarget属性将填充即将获得焦点的元素。如果您"focusout"通过将焦点设置回失去焦点的事物来处理事件e.target,那么它将立即重新接收焦点以及一个"focus""focusin"事件,而将要接收焦点的对象既不会接收焦点,也不会接收焦点任何焦点事件。

因此,处理"focusout"事件是防止对象失去焦点的最佳方法。从技术上讲,因为事件不是cancelable,你无法阻止它失去焦点,但你可以强制它立即重新接收焦点,从而防止焦点转移到另一个元素。

同时,如果你的意图是阻止一个对象接收焦点,那么你最好的办法是"focus"通过调用blur元素来处理它的事件,这样它就不会接收焦点也不会接收"focusin"事件。

于 2017-02-03T20:05:44.933 回答