JavaScript确认在一些操作系统上无限循环中捕获的模糊/聚焦事件

时间:2018-03-27 05:04:59

标签: javascript jquery confirm

我有this jsfiddle的JavaScript确认框。这也是片段:



$('#txtTestOne, #txtTestTwo').on('blur', function(e) {
  var retval = confirm('Do you really want to go there?');
  if (!retval) {
    e.target.focus();
  } else {
    e.relatedTarget.focus();
  }
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<input type="text" id="txtTestOne" autofocus>
<input type="text" id="txtTestTwo">
&#13;
&#13;
&#13;

这在我的笔记本电脑(OS X 10.6.8)上运行良好,在Chrome和Opera中都经过测试。但是,当我在运行OS X 10.11.6的桌面计算机上测试时,我发现确认框在Chrome和Safari中无限循环(在进行选择后不断重新显示窗口)。

我也添加了片段,以确保它不是jsfiddle的问题,不,它不是。代码段和jsfiddle的行为相同。

由于问题存在于一个操作系统上的两个不同浏览器中,而另一个操作系统中的两个浏览器中不存在问题,因此它似乎不太可能是浏览器问题。我也不认为我对代码做了任何错误,但在知道之前,我才知道。

我做错了什么,或者我不知道的确认方法是否存在某些问题?此外,如果它在您的计算机上正确运行,您可能会非常友好地在评论中提及您正在运行的操作系统。

2 个答案:

答案 0 :(得分:0)

在这里,伙计我修好了。我使用Chrome时也遇到了无限循环问题,但现在这应该可以像我希望的那样在所有浏览器中使用

$('.input').on('click', function(e) {
  count++;
  var retval = confirm('Do you really want to go there?');
  if (!retval) {
    $('.input').not(e.target).focus();
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="txtTestOne" class="input" autofocus>
<input type="text" id="txtTestTwo" class="input">

Nope sry,焦点模糊不起作用,没有正确测试

答案 1 :(得分:0)

我似乎找到了解决方案。如果你有一个比我更清楚的图片,为什么我们必须这样做,请解释。

$('#txtTestOne, #txtTestTwo').on('blur', function(e) {
  if (!$(e.relatedTarget).is(':text')) {
    return;
  }

  var retval = confirm('Do you really want to go there?');
  if (!retval) {
    e.target.focus();
  } else {
    e.relatedTarget.focus();
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<input type="text" id="txtTestOne" autofocus>
<input type="text" id="txtTestTwo">