我想通过警告框对模糊事件做出反应。我们的想法是验证内容并在值无效时给出反馈。我没有使用警报框进行调试,我的客户坚持要求给予用户反馈。 我在这里有一个相似之处:(但这个问题并不多余!)Focusout event loop
所以我目前的解决方案就是这样
HTML:
Type some stuff here:
<br>
<input type="text" id="test" />
JavaScript的:
var doFocus = function () {
$("#test").focus();
console.log("do focus");
};
$("#test").blur(function () {
console.log("Blur event got triggered.");
alert("Blur event got triggered.");
window.setTimeout(function () {
doFocus();
}, 1);
});
到目前为止这是有效的,但是 问题是:如果您打开网站,请单击输入字段,然后更改窗口。例如,打开文本编辑器,然后更改回来。 Safari陷入事件循环(一次又一次地调用回调)......
答案 0 :(得分:4)
只需删除此行:
alert("Blur event got triggered.");
不应在任何模糊事件回调函数中使用Alert()。
<强>更新强>
var doFocus = function () {
$("#test").focus();
console.log("do focus");
};
var bluring = function(sender){
$(sender).off('blur');
console.log("Blur event got triggered.");
alert("Blur event got triggered.");
window.setTimeout(function () {
doFocus();
$(sender).on('blur',function(){bluring(this)});
}, 1);
};
$("#test").blur(function(){bluring(this)});
答案 1 :(得分:2)
我能够添加警报。当仍然在旧窗口时,safari会为新窗口调用“激活”。添加“超时”以输入正确的时间范围。在第一次警报发生之前,提示条件并更改相关变量可防止警报循环。
示例:
safari.application.addEventListener("activate", function(){
//setTimeout prevents boundary complications
setTimeout(
function() {
if (enabled) {
var tab = safari.application.activeBrowserWindow.activeTab;
if (curTab != tab) {
curTab = tab;
if (selectedTab != tab)
alert('This is an alert!!');
}
}
}
,1000);
},true);