2012-10-09 93 views
1

不确定如何解决这个问题。IE中的jQuery focus()和focusout()冲突

我使用jQuery.focus()jQuery.focusout()来触发Ajax请求并在WordPress中重命名文章。此代码在Chrome和Firefox中可以正常工作,但我无法在IE上运行它。

片段:

$('.editname').on('click', function() { 

    var input = $('<input id="editcat" type="text" name="editcat" value="' + name + '" />'); 
    input.appendTo($(this)); 
    $("#editcat").focus(); 
}); 

$(".editname").focusout(function() { 

    $(this).children('input').detach(); 
    $(this).children('span').show(); 


}); 

工作示例:http://jsfiddle.net/moraleida/fE5Tq/3/

似乎事件的内容()事件在IE中appendTo之后称为,浏览器有时间focus()上所附的输入之前。

有没有已知的解决方法呢?

编辑

更改focusoutblur不起作用。显然,问题在于拨打$("#editcat").focus();使得.editname松散焦点/模糊。如果我评论该行,输入显示正常,但是当我点击以关注它时,它会被分离。

回答

2

事实证明,问题在于将focusout附加到父元素,而不是input元素。这解决了它:

$(".editname").on('focusout', 'input', function() { 

    // $(this) now refers to the input element, not .editname 
    $(this).siblings('span').show(); 
    $(this).detach(); 


    }); 
});​ 

最终工作捣鼓参考:http://jsfiddle.net/moraleida/fE5Tq/8/

2

尝试模糊事件,而不是

$(".editname").on('blur', function() { 

    $(this).children('input').detach(); 
    $(this).children('span').show(); 


}); 
+0

感谢,而且执行模糊不起作用。显然,问题在于“重点”。查看编辑。 – moraleida

1

尝试使用,而不是事件的内容模糊事件。

+0

谢谢,但模糊也行不通。显然,问题在于“重点”。查看编辑。 – moraleida