3

これはばかげた質問かタイプミスかもしれませんが、とにかく質問します...次のフォームがあり、フォームが送信されたら、のすべての値をinput type="number"確認し、ユーザーがいくつかの値がゼロでない限り、最初のゼロを削除するために、01、025、0100 のように、入力の先頭にゼロを配置します。jQuery セレクターを使用して、JavaScript の単純な部分をさらに簡単にします。ここにあるすべてのテキスト ボックスはそうではtype="number"ないtype="text"ことに注意してください。私の入力に注意してください。

ここに画像の説明を入力

これが私のコードです:

$('input[type=number]').each(function(){
    // only if the string is not zero
    if(this.value.charAt(0) == "0" && this.value != "0"){
        this.value = this.value.substring(1);
    }   
});

しかし、フォームを完全にテストするために戻ってきたとき、コードが機能しないことに気付きました! そのため、何が起こっているかを確認するためにコンソールに書き込むために次を追加しました。

console.log("typeof:" + typeof(this.value) + " " + this.id + " char:" + this.value.charAt(0) + " val:" + this.value )

そして、これにより次の出力が得られました.ゼロの値を持たない最後の4つの項目に注意してください:

ここに画像の説明を入力

this.value.charAt(0)ユーザーがデフォルト値のゼロを変更したのに、なぜ取得できないのですか?

4

3 に答える 3

4

値にスペースがあるようです。比較する前にそれをトリミングしてください(たとえば、jqueryを使用するか、そのためだけに jquery を含めたくない場合は here を参照してください):

$('input[type=number]').each(function(){
    // only if the string is not zero
    var myval = $.trim(this.value);
    this.value = myval.replace(/^[0]+/g,"");

});

上記の解決策は、任意の先頭のゼロを削除します。その部分は、この回答から同様の質問に取られました。

于 2012-08-24T09:03:57.283 に答える
3

これはいくらか削減できます。

$('input[type=number]').each(function() {
    this.value = this.value.replace(/^\s*0+(?=\d)/, '');
});

これにより、先行する空白がある場合でも、先行ゼロが削除されます (これはおそらく問題です)。

于 2012-08-24T09:01:34.283 に答える
1

何らかの理由で空白が先行しているようです。ゼロチェックの前にjQueryのtrim関数を使用して、空白が削除されていることを確認してください。

于 2012-08-24T08:58:48.263 に答える