0

当您在 IE 中使用 .trigger("focus") 时,jQuery 不会“看到”稍后将发生的异步焦点事件,因此它会触发自己的一个以确保焦点事件始终如上文所述发生。这会导致对事件处理程序的两次调用。为了避免这种双重调用——但有可能根本不调用事件处理程序——直接使用 DOM 焦点方法,例如 $("selector").get(0).focus()。

这就是 jquery migrate 网站所说的。虽然我不清楚是否每个 trigger.focus 都需要替换为新的实现?如果是这样的话,一个简单的按钮的新代码是什么。触发焦点?

 $('#btnMove').trigger('focus');
4

2 回答 2

1

读取触发“焦点”事件的顺序

获取本机 DOM 元素并在其上调用焦点事件。

$('#btnMove').get(0).focus();

或者

$('#btnMove')[0].focus();

或者使用纯 JavaScript

document.getElementById('btnMove').focus();
于 2014-03-18T04:15:27.087 回答
0

您可以使用on 方法

$('#btnMove').on('focus', handler);

此外,您可以阅读http://api.jquery.com/focus/并找到一条注释:

尝试将焦点设置到隐藏元素会导致 Internet Explorer 出错。注意只在可见元素上使用 .focus() 。要在不为元素设置焦点的情况下运行元素的焦点事件处理程序,请使用 .triggerHandler("focus") 而不是 .focus()。

于 2014-03-18T04:13:42.417 回答