1

HTML5 の「パターン」属性と正規表現を使用した検証を備えた日付ピッカーであるコントロールがあります。それは正常に動作します。

<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() を使用してスクリプト内に配置すると、機能しなくなります。(パターンは常に日付のフォーマットにエラーがあると考えています)

<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 に表示するようにするものです。

4

2 に答える 2

3

\d可能性が高いのは、正規表現文字列などにエスケープ文字があることです。これらは、パターン属性がインラインで追加されるとリテラル文字として扱われますが\、javascript 文字列に配置されると別の意味で扱われます。

\その式を文字列でラップしたので、おそらく文字をエスケープする必要があります\\d

文字列を書き出すconsole.logか呼び出してみて、文字alert()列が JavaScript によってどのように解釈されたかを視覚化できます。

于 2012-07-06T06:53:59.267 に答える
0

私は JavaScript プログラマーではありませんが、タグ readonly='readonly' を削除すると、MSIE8 で正しく機能します。

于 2012-07-06T07:21:41.817 に答える