首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript破坏文本框

JavaScript破坏文本框
EN

Stack Overflow用户
提问于 2012-07-06 14:46:09
回答 2查看 116关注 0票数 1

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

代码语言:javascript
运行
复制
<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]|1\d|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总是认为日期的格式有误)

代码语言:javascript
运行
复制
<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]|1\d|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]|1\d|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>

我不知道为什么会发生这种事。我已经多次尝试将复制粘贴到document.write()中。它可以在它之外工作,但不能在它里面。我试着让一个朋友来做这件事。我们在另一个脚本中尝试它,它工作得很好,它就是在这个脚本中被破坏的。

请帮帮忙。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-06 14:53:59

一个很大的可能性是你的正则表达式字符串中有转义字符,例如\d。当模式属性以内联方式添加时,这些字符被视为文字字符,但是当将\放入javascript字符串中时,这些字符被视为不同的含义。

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

尝试将字符串写出到console.log或调用alert(),这样就可以可视化JavaScript是如何解释字符串的。

票数 3
EN

Stack Overflow用户

发布于 2012-07-06 15:21:42

我不是一个javascript程序员,但是如果我删除了标记readonly='readonly‘在MSIE8中是正确的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11357172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档