jQuery:Textfield失去了对unwrap()的关注

时间:2010-12-03 22:44:18

标签: jquery internet-explorer focus

当用户提交或关注无效输入时,我有一个包含在错误div中的文本字段。如果用户纠正了他的错误,我想删除包装器,但unwrap()方法导致该字段失去焦点。

$(special_input).live('keyup', function() {
    if (input_okay && input_had_errors) {
        $(this).unwrap();
    }
});

没什么大不了的,我可以重置焦点而且效果很好......

$(this).unwrap().focus();

......到处都是IE!我已经尝试在上面的函数中插入一个setTimeOut()函数来解决IE缺乏对focus()事件冒泡的支持,并且有效......有点儿。

唯一的问题是它将光标设置为正在键入的内容的开头而不是结尾。 (什么?!)

无论如何,重置焦点看起来有点难看。有没有办法让unwrap()首先解除它?

感谢。

有点解决方案:

由于ender和elusive指出的原因,我刚刚决定解决错位光标的问题,这可以通过在再次聚焦之后重置文本字段的值来完成。代码现在看起来像这样。

$(this).unwrap();
setTimeout(function() { $(this).focus().val($(this).val()); }, 5);

2 个答案:

答案 0 :(得分:3)

我不认为你可以.unwrap()而不会失去焦点,因为它会从DOM中删除父节点,并将子节点附加到父节点之后。如果浏览器在分离时没有移除焦点,则可以键入未附加的输入字段。

答案 1 :(得分:0)

我同意难以理解的是,由于引用的原因,你不可能.unwrap()而不会失去焦点。您可能会考虑首先包装文本字段的原因。是否有可能通过简单地将一个类应用于该字段,或者在该字段之前或之后放置div来实现相同的效果?这将允许您完全绕过这个问题。