Internet Explorer中的只读输入框错误

我有一个奇怪的错误,好吧,MSIE。

似乎它在所有主要的MSIE版本上都失败了:6,7,8和9(!)

 test   jQuery(document).ready(function(){ var test=jQuery('#in'); test.focus(function(){ if(test.val()=='empty')test.val(''); test.attr('readonly',false); }); test.blur(function(){ if(test.val()=='')test.val('empty'); test.attr('readonly',true); }); });     

让我解释一下这个系统是如何工作的以及出了什么问题。

当用户单击(聚焦)输入框时,输入框应该是可编辑的(即丢失只读标志)。 然后,当他/她离开输入框(即模糊事件)时,完成一些处理(未在代码中示出)并且输入框是只读的。

这在大多数浏览器(firefox,opera,基于webkit)中都很有魅力,但不是任何版本的IE(包括9 beta)。 问题是在IE中,用户必须单击输入框两次。

此时,您可能会问第一次输入框是否只读? 不,我测试了它,javascript报告它是可编辑的。

轻松修复,只需在输入框上触发一个点击事件(模拟用户的双击行为),不是吗? 不, .focus().focus()都失败了。 不知道为什么。

编辑:知道光标确实出现在文本框中,至少是明显的。

重要提示:人们,请在回答之前至少尝试一下代码!

我不会说这是一个错误。 如果更改该值,则还会删除当前的textRange。

尝试test.select() ,它应该将光标返回到输入。

 test.focus() 

将导致一个以“内存不够”为止的循环 – 错误。

我相信readonly应该readOnly 。 看起来很奇怪你会切换这个属性。 您也可以尝试删除它

 jQuery("#foo").removeAttr("readOnly"); //.removeAttr("readonly"); 

试试这个香港专业教育学院刚尝试过,它有效: