失去焦点事件与获取焦点事件

11

jQuery是否可以防止这种行为?

$("input").focusout(function() {
    $(this).focus();
});

6
浏览器可以防止这样的行为。这不是jQuery的错,而是一种安全特性。 - Lime
@Lime:如果Šime Vidas的回答是正确的,那么这是一个非常值得怀疑的安全功能。 - Jon
1
正确的事件类型对是focusin/focusout和focus/blur。不要混淆它们... - Šime Vidas
@Jon 如果不是安全功能,那么它确实可以防止无能的程序员严重搞砸事情 :) 我只能想象事情会有多么令人沮丧...... 点击什么?点击什么?点击什么?!??我对这个输入计算机已经没兴趣了!! - Lime
你尝试过搜索吗?http://stackoverflow.com/questions/3564481/why-this-focus-will-not-work-on-the-same-element-when-focusout-in-jquery - Lime
2个回答

12

以下是跨浏览器实现的方法:

$('input').blur(function() {
    var that = this;
    setTimeout(function() { $(that).focus(); }, 0);
});

现场演示: http://jsfiddle.net/jzt2Z/1/


@Dmitriy 伟大的力量伴随着巨大的责任 :) - Šime Vidas
是的,聚焦一个文本框,然后又聚焦另一个,再聚焦另一个,它就会跳舞 :} - Lime
1
@Dmitriy @Lime 看看这个(试着输入一些东西):http://jsfiddle.net/jzt2Z/6/show/ :) - Šime Vidas

1

1) 实际上它在Chrome中可以工作。这里有一个例子:http://jsfiddle.net/8WP53/

一旦第一个输入框失去焦点,它将保持焦点状态,用户无法聚焦到其他输入框

2) 在IE中,我会收到一个"堆栈溢出"的错误(品牌名称StackOverflow.com的错误 :)

3) 奇怪的是,在Firefox中,您可以选择任何输入框,但不会产生任何错误


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接