代码之家  ›  专栏  ›  技术社区  ›  Christian

Internet Explorer中的只读输入框错误

  •  6
  • Christian  · 技术社区  · 14 年前

    我有个奇怪的虫子,嗯,是的。

    似乎所有主要的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>
    

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

    当用户单击(聚焦)输入框时,输入框应可编辑(即,丢失只读标志)。然后,当S/HE离开输入框(即模糊事件)时,一些处理完成(代码中未显示),输入框变为只读。

    这在大多数浏览器(基于Firefox、Opera、WebKit)中都是一种魅力,但不适用于任何版本的IE(包括9测试版)。 问题是,在IE中,用户必须单击输入框两次。

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

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

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

    重要: 各位,请至少在回答之前尝试一下密码!

    3 回复  |  直到 14 年前
        1
  •  8
  •   Shashank Agrawal    8 年前

    我不会说是虫子。 如果更改值,还将删除当前的文本范围。

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

    test.focus()
    

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

        2
  •  2
  •   Shashank Agrawal    8 年前

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

    jQuery("#foo").removeAttr("readOnly"); //.removeAttr("readonly");
    
        3
  •  1
  •   Tim Cooper    13 年前

    试试这个,我刚试过,它起作用了:

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