jQuery没有激发' focusout'在IE中的.appendTo()之后

时间:2016-02-09 16:26:48

标签: javascript jquery internet-explorer

jQuery没有触发'焦点'在.appendTo()之后调用IE。

$("input[type=text]").on("focusin", function() { $(this).css("border-color", "red"); });
$("input[type=text]").on("focusout", function() { $(this).css("border-color", "lightgray"); });

var $content = $("#content");
var $containerBlue = $("#container-blue");
var $containerGreen = $("#container-green");

$("#trigger-btn").on("mousedown", function() {
  if($containerBlue.find("#content").length > 0)
    $content.appendTo($containerGreen);
  else
    $content.appendTo($containerBlue);
});

请参阅https://jsfiddle.net/KhD/emzrhnuy/3/

重现的步骤:

  1. 点击任何输入 - 它会变为红色边框
  2. 点击'触发器'按钮 - 带有输入的容器将从一个div附加到 另一
  3. Chrome中的红色边框已消失,但仍保留在IE中。
  4. 有没有办法在不使用setTimeout()的情况下克服这个问题?

1 个答案:

答案 0 :(得分:0)

可能的解决方法是手动触发焦点事件,即可以另外设置焦点在任何适当的元素上,所以说'焦点窃取者':

$("#focus-stealer").focus();

请注意,使用文档元素作为“焦点窃取器”可能会在IE中出现一些问题。并且应检查document.activeElement是否未定义。

您也可以使用:

document.activeElement.blur();

为了使这个更具体,可以使用像

这样的smth
if($("#container").find(":focus").length > 1)
    document.activeElement && document.activeElement.blur();