2012-12-25 36 views
-1

嗨我在Javascript中有以下代碼。這在Firefox 17中不起作用 (您可以鍵入字母)並且可以在其他瀏覽器中正常工作。有人能告訴我一個解決方法嗎?感謝您的期待。只有數字腳本不能在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> 
+0

什麼事件是您使用?當你檢查調試器時,你看到Firefox和其他瀏覽器中的「charCode」有什麼不同的值? – Pointy

+0

請指定「不起作用」是什麼意思 – fresskoma

+0

另外測試查看字符代碼是否大於31是不正確的。這意味着所有的控制字符都會被接受爲數字。 – Pointy

回答

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,因爲這些瀏覽器做了將「事件」值保留爲全局變量。

0

這是檢查數字的不好方法。 charCode遠不只是跨瀏覽器。這裏有一篇文章解釋了鍵盤事件的大部分差異(如果不是全部的話):http://unixpapa.com/js/key.html

總的來說,它告訴你儘量避免使用它們。

這是一個正確的方式(使用的onkeyup,因爲onkeypress事件沒有更新後的值):

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/

+1

這個值不會被「按鍵」事件更新,我不這麼認爲。 – Pointy

+0

這隻測試值是否有數字。用'/^\ d + $ /'替換'/ \ d + /'會將值限制爲數字。 –

+0

@確實,它不會更新。該死的! –