当用户提交或关注无效输入时,我有一个包含在错误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);
答案 0 :(得分:3)
我不认为你可以.unwrap()
而不会失去焦点,因为它会从DOM中删除父节点,并将子节点附加到父节点之后。如果浏览器在分离时没有移除焦点,则可以键入未附加的输入字段。
答案 1 :(得分:0)
我同意难以理解的是,由于引用的原因,你不可能.unwrap()
而不会失去焦点。您可能会考虑首先包装文本字段的原因。是否有可能通过简单地将一个类应用于该字段,或者在该字段之前或之后放置div来实现相同的效果?这将允许您完全绕过这个问题。