jQuery .wrap() 无需重新聚焦

Posted

技术标签:

【中文标题】jQuery .wrap() 无需重新聚焦【英文标题】:jQuery .wrap() without needed refocusing 【发布时间】:2014-03-24 04:12:42 【问题描述】:

我需要用 div 包装输入,但在 .wrap() 输入模糊之后。如何修复?

<input type="text">

<script>
    $("input").on("keypress", function()
        $(this).wrap("<div></div>");
    )
</script>

http://jsfiddle.net/n3W3W/

【问题讨论】:

这会在每次按键时触发wrap,但我想你知道吗?只是看起来你正在尝试做的事情可能有更好的解决方案...... 【参考方案1】:

首先,解释一下发生了什么:

当您调用wrap 时,jQuery 正在从 DOM 中删除输入。它创建一个 DIV 元素,附加输入,然后重新附加到 DOM。由于输入已从 DOM 中移除,因此您失去了焦点。

解决此问题的最简单方法是在wrap 之后调用focus。追加DIV元素后,jQuery会触发对input元素的关注。

在这里提琴:http://jsfiddle.net/2PgR8/

但是,这有 user13500 在 cmets 中提到的问题。也就是说,输入元素始终包含在 DIV 中。你最终会得到一个 DOM 结构,例如:

<div>
    <div>
        <div>
            <div>
                <input></input>
            </div>
        </div>
    </div>
</div>

如果你输入“cool”...所以不是每个都有效率:)

请问将输入包装在 DIV 中的目的是什么?您可以通过条件检查限制wrap,例如:

if($(this).data('is-wrapped') === undefined) 
    $(this).wrap('<div></div>').data('is-wrapped', true).focus();

如果你有它的要求......这是一个小提琴! http://jsfiddle.net/2PgR8/1/

【讨论】:

以上是关于jQuery .wrap() 无需重新聚焦的主要内容,如果未能解决你的问题,请参考以下文章

jQuery控制form表单元素聚焦

jQuery .validate 聚焦时抛出异常。说“检查'依赖'方法”[重复]

jQuery - 聚焦在 iframe 内?

jquery 文本框聚焦文字删除

如何通过使用jquery聚焦来添加元素

javascript JQuery - 输入聚焦/模糊类切换