JavaScript破坏文本框



我有一个控件,它是一个日期选择器,使用HTML5的"pattern"属性和正则表达式进行验证。它运行良好。

<input type='text' class='date-pick' name='breakEndIE' size='8' placeholder='01-03-2011' style='max-width:100px' pattern='^(((0[1-9]|[12]d|3[01])-(0[13578]|1[02])-                ((19|[2-9]d)d{2}))|((0[1-9]|[12]d|30)-(0[13456789]|1[012])-((19|[2-9]d)d{2}))|((0[1-9]|1d|2[0-8])-02-((19|[2-9]d)d{2}))|(29-02-((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$' readonly='readonly' required />

然而,当我使用document.write()将其放入脚本中时,它就停止了工作。(Pattern总是认为日期格式有错误)

<script>
            var ifFFOCHR = false;
            if (navigator.appVersion.indexOf("MSIE") > -1) ifFFOCHR = false;
            else if (navigator.appVersion.indexOf("Chrome") > -1) ifFFOCHR = true;
            else if (navigator.appVersion.indexOf("Safari") > -1) ifFFOCHR = false;
            else ifFFOCHR = true;
            if (ifFFOCHR == true) 
                {
                    //FIREFOX/CHROME/OPERA CODE HERE
                    document.write("<input type='text' class='date-pick' name='breakEnd' size='8' placeholder='01-03-2011' style='max-width:100px' pattern='^(((0[1-9]|[12]d|3[01])-(0[13578]|1[02])-((19|[2-9]d)d{2}))|((0[1-9]|[12]d|30)-(0[13456789]|1[012])-((19|[2-9]d)d{2}))|((0[1-9]|1d|2[0-8])-02-((19|[2-9]d)d{2}))|(29-02-((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$' required />");
                }
            else 
                {
                    //IE/SAFARI CODE HERE
                    document.write("<input type='text' class='date-pick' name='breakEndIE' size='8' placeholder='01-03-2011' style='max-width:100px' pattern='^(((0[1-9]|[12]d|3[01])-(0[13578]|1[02])-                ((19|[2-9]d)d{2}))|((0[1-9]|[12]d|30)-(0[13456789]|1[012])-((19|[2-9]d)d{2}))|((0[1-9]|1d|2[0-8])-02-((19|[2-9]d)d{2}))|(29-02-((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$' readonly='readonly' required />");
                }
            </script>

我不知道为什么会发生这种事。我已经多次尝试将复制并粘贴到文档.write()中。它在外面起作用,但在里面不行。我试过请一个朋友来做。我们在另一个脚本中尝试过,效果很好,只是在这个脚本中,它被打破了。

请帮忙。

仅供参考:该脚本是为了使某些代码显示在IE&Safari和不同的代码在Firefox、Opera和Chrome中显示。

一种很强的可能性是正则表达式字符串中有转义符,例如d。在内联添加模式属性时,这些字符被视为文字字符,但在放置在javascript字符串中时,被视为不同的含义。

因为您现在已经将该表达式包装在一个字符串中,所以可能需要转义字符,例如\d

尝试将字符串写入console.log或调用alert(),这样您就可以可视化JavaScript对字符串的解释。

我不是javascript程序员,但如果我删除标记readonly='readony',它将在MSIE8中正常工作。

最新更新