2010-11-09 101 views
0
<blink> 
<input type="text" class="form-text required" value="" size="35" id="editfiled" name="somename" maxlength="128"> 
<div class="description"><p>some text</p> 

$('input').focus(function() { 

    $(this).next("div.description").slideToggle("slow"); 
    $(this).wrap('<div ></div>').select('input'); 
}); 
</blink> 

之后我无法输入此输入。jquery input.focus + wrap无法输入输入

我需要,如果输入获得焦点,它必须在div内突出显示。

+2

为什么你需要的是'blink'元素? – 2010-11-09 23:50:12

回答

1

你碰到一个圆圈。

如果输入获得焦点,则将其包装到div中。
由于这是标记的重建,输入将失去焦点。如果再次单击它,焦点将再次触发,另一个div将缠绕输入等等。

你可以尝试这样的:

$('input').focus(function() {  
    if(!$(this).data('wrapper')) 
    { 
     $(this).next("div.description").slideToggle("slow"); 

     $(this).data('wrapper',$(this).wrap('<div/>').parent()); 
     var _this=this; 
     setTimeout(function(){_this.focus();},10); 
    } 
    else 
    { 
    this.select(); 
    } 
}); 

它存储了输入的包装-DIV数据(),所以如果输入已经被包裹,功能would'nt做任何事情。

不要忘记从data()中移除包装,如果你在某处删除包装在输入中的div。

(在Firefox时的slideToggle完成选择丢失,也许你需要另一种解决方案,以显示/隐藏说明)

1

它应该像这样(没有参数的.select()调用):

$('input').focus(function() { 
    $(this).next("div.description").slideToggle("slow"); 
    $(this).wrap('<div></div>').select(); 
}); 

You can test it here

+0

仍然存在问题。输入窗口被阻止 – sjcris 2010-11-09 23:45:53

+0

@sjcris - 在哪个浏览器中?这里的演示没有任何问题。 – 2010-11-09 23:46:45

+0

firefox 3.6.12 hm ...在铬工作 – sjcris 2010-11-09 23:51:57