3

私は開発した Web ページをテストしており、この Web ページでいくつかの jQuery スクリプトを実行しています。

Web ページは Chrome と Firefox で期待どおりに表示され、機能しますが、現在 Internet Explorer (バージョン 9) でテストしています。

次のスクリプトを除いて、他のすべての jQuery スクリプトはこのページで動作します。

$(".SpecificTextboxClass").change(function() {
    if ($(this).val() == 3) {
        $(".SpecificTextboxClass").not(this).val(0);}});

更新編集:

テキストボックスのコードは次のとおりです。

<input type="text" name="scale" class="Validation SpecificTextboxClass" value="1">

ダブルクラスが問題を引き起こしている可能性はありますか?

2 番目の更新:

Internet Explorer 6 で Web ページを読み込んだところ、同じ問題が発生しました。私はjQuery 1.9.1も使用しています(私が知っている限り)。

3 番目の更新:

検証コードを削除すると、問題は解決するようです。

$('.Validation').keyup(function () {
    if ("" != this.value.replace(/([0-9]|10)(\.\d{1,3})?]/g, '')) {
    this.value = this.value.replace(/[^0-9\.]/g, '').substring(0,5);}});
4

3 に答える 3

2

わかりました、あなたの jsFiddle のおかげで、私は問題を見つけたと思います。

バグは検証コードにあり、有効かどうかをテストするために使用している正規表現パターンにあります-]パターンの最後に迷子の文字があります。

if ("" != this.value.replace(/([0-9]|10)(\.\d{1,3})?]/g, '')) {
                                                    ^
                                              this is invalid

これにより、毎回テストが失敗し、コード内の値が変更され、変更イベントの発生が停止しているように見えます。

不正な]キャラクターを削除することで問題を解決できます。

.match()また、テストではなく正規表現を使用することをお勧めし.replace()ます-そのようなテストreplaceには間違った機能ですif()

これを直接置き換えることができます:

if (!this.value.match(/^(([0-9]|10)(\.\d{1,3})?)*$/)) {

これはまったく同じ機能を持ちますが、より効率的に実行できます。

修正を示すための jsFiddle の更新については、こちらを参照してください。(console.log()呼び出しが含まれていることに注意してください。IEで実行するときは、F12開発ツールが開いていることを確認してください)

ただし、それでも、それがあなたが望んでいるものであるとは確信していません。これは(以前のバージョンと同様に)次のような文字列に対して有効な値を返します3.1346.21710.45-つまり、複数の値が連結されています。あなたのバージョンでは、これは修飾子 (複数の出現を置き換える)replaceによって引き起こされます。g私のバージョンで*は、パターンの最後にある によって行われます。

単一の値のみが必要な場合は、バージョンから を削除するか、 をin mine にg置き換えます。*?

最後に、10 進数の値をテストしているように見えるので、parseFloat()すべての正規表現の代わりに使用することを検討することもできます。

それが役立つことを願っています。

于 2013-06-06T12:39:59.927 に答える
0

ドキュメントの準備完了/ウィンドウの読み込み時にコードを実行するように設定していないことに気付きました。DOM がセットアップされる前にコードが実行されるという競合状態に陥っている可能性があります。

次のようにコードを設定していることを確認してください。

$( document ).ready(function() {

    $(".TAB1val1").change(function() {
        if ($(this).val() == 3) {
            $(".TAB1val1").not(this).val(0);
        }
    });
});
于 2013-06-06T11:17:39.237 に答える
0

「SpecificTextboxClass」入力タイプを確認してください。追加していない可能性があります。

于 2013-06-06T09:09:20.997 に答える