繁体   English   中英

更改窗口后的Safari模糊事件循环

[英]Safari blur event loop after changing window

我想对带有警报框的模糊事件做出反应。 想法是验证内容,如果值无效,则给出反馈。 我没有使用警报框进行调试,我的客户坚持要使用警报框来提供用户反馈。 我在这里有一个类似的东西:(但是这个问题不是多余的!) Focusout事件循环

所以我目前的解决方案是这样的

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卡在事件循环中(一次又一次调用回调)...

只需删除此行:

alert("Blur event got triggered.");

Alert()绝对不能在任何模糊事件回调函数中使用。

UPDATE

DEMO

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)});

我能够添加警报。野生动物园仍在旧窗口上时,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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM