-1

こんにちは、私は Javascript で以下のコードを持っています。これは Firefox 17 では機能せず (文字を入力できます)、他のブラウザーでは正常に機能します。回避策を教えてもらえますか?ご覧いただきありがとうございます。

function onlyNumbers(evt)
{
var e = event || evt; // for trans-browser compatibility
var charCode = e.which || e.keyCode;

if (charCode > 31 && (charCode < 48 || charCode > 57))
    return false;

return true;

}

編集:

<input name="outletno" type="text" id="outletno" size="15" maxlength="10" onkeypress="return onlyNumbers()" value="<?= htmlentities ($values['outletno']) ?>"></td>
4

2 に答える 2

3

イベント パラメータを関数に渡していません。

<input name="outletno" type="text" id="outletno" size="15" maxlength="10" onkeypress="return onlyNumbers(event)" value="<?= htmlentities ($values['outletno']) ?>"></td>

Firefox にはグローバルな「イベント」シンボルがありません。あなたの関数はパラメータを期待していますが、それを渡していませんでした。

次のように、ブラウザーによる "onfoo" 要素属性の処理は、コンストラクターを使用して関数を構築するかのように考えることができますFunction

element.onfoo = new Function(attributeValue, "event");

(これは実際には起こりませんが、実際にはそのようになっています。) これは、属性値のコードが、"event" というパラメーターが利用可能であることを期待できることを意味し、それを関数に渡します。

コードは IE、Chrome、および Safari で機能します。これらのブラウザー「イベント」値をグローバル変数として保持するためです。

于 2012-12-25T14:10:26.000 に答える
0

これは、数字だけをチェックする悪い方法です。charCode は、クロスブラウザー以外の何物でもありません。これは、キーボードイベントのほとんどの違い (すべてではないにしても) を説明する記事です: http://unixpapa.com/js/key.html

全体として、それらをできるだけ使用しないように指示しています。

これが正しい方法です(onkeypressには更新された値がないため、onkeyupを使用します):

document.getElementById('outletno').onkeyup = function() {
    // If the value isn't a number, take off the last character
    if (!/\d+/.test(this.value)) {
        this.value = this.value.slice(0, -1);
    }
};

jsfiddle の作業: http://jsfiddle.net/uFRwZ/

于 2012-12-25T14:12:01.787 に答える