Internet Explorer中的只读输入框错误

时间:2010-10-04 14:39:32

标签: javascript jquery internet-explorer

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

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" ><head><title>test</title>

  <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
  <script type="text/javascript">
   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);
    });
   });
  </script>

</head><body>

  <input type="text" value="empty" readonly="readonly" id="in"/>

</body></html>

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

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

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

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

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

修改:知道光标确实显示在文本框中,至少是明显的。

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

3 个答案:

答案 0 :(得分:8)

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

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

test.focus()

将导致循环以“内存不足” - 错误结束。

答案 1 :(得分:2)

我认为readonly应为readOnly。你可以切换这个属性似乎很奇怪。您也可以尝试删除它

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

答案 2 :(得分:1)

试试这个我只是尝试过它的确有效:

<input type="text" value="empty" id="in" readonly/>