我已经将输入字段限制为仅通过js的数字,但我不确定如何也允许小数...
function isNumberKey(evt)
{
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
提前谢谢!
答案:
function isNumberKey(evt)
{
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46)
return false;
return true;
}
添加charCode 46工作得很好(按键值)。 190和110什么也没做。
感谢您的帮助!
答案 0 :(得分:8)
代码取决于您正在收听的事件,通过使用带有测试输入的 JavaScript 事件KeyCode测试页here,您可以轻松找到所需内容。完全停止(右移左.
)你有
onKeyDown onKeyPress onKeyUp
event.keyCode 190 46 190
event.charCode 0 46 0
event.which 190 46 190
并且对于数字键盘上的.
,它是
onKeyDown onKeyPress onKeyUp
event.keyCode 110 46 110
event.charCode 0 46 0
event.which 110 46 110
正如您所看到的,使用 charCode 检查 onKeyPress 是最统一的,这是它的unicode号码; String.fromCharCode(46); // "."
。
还有一个full list on the MDN page for KeyboardEvent,其中也有说明
注意:Web开发人员不应在keydown和keyup事件处理程序中使用可打印键的keycode属性。如上所述,键码不可用于检查将被输入的字符,特别是当按下Shift键或AltGr键时。当Web开发人员实现快捷键处理程序时,keypress事件至少是Gecko上用于此目的的更好事件。有关详细信息,请参阅Gecko Keypress Event。
您可以使用我链接到的测试页中选择的键,观察在 keyCode 上使用 AltGr 或 Shift 的奇怪效果好。
答案 1 :(得分:1)
使用HTML5,input
元素获得了一个新属性:pattern
。您可以在提交表单之前指定由浏览器验证的正则表达式。
<input type="text" pattern="([0-9]+\.)?[0-9]+" />
尚未得到广泛支持。
Internet Explorer 10,Firefox,Opera和Chrome支持模式属性。 (w3schools)
免责声明:表达力弱,建立更好的一个:)
答案 2 :(得分:0)
假设您正在使用按键或向上按键:
function isNumberKey(evt)
{
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || (charCode > 57 && charCode != 190 && charCode != 110)))
return false;
return true;
}
110是小数点,190是小数
http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes
答案 3 :(得分:0)
<asp:TextBox ID="txt" onkeypress="return isDecimalKey(event,this)" runat="server">
function isDecimalKey(evt,obj)
{
var charCode = (evt.which) ? evt.which : event.keyCode
var value = obj.value;
var dotcontains = value.indexOf(".") != -1;
if (dotcontains)
if (charCode == 46) return false;
if (charCode == 46) return true;
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
}
在MVC中
@Html.TextBoxFor(m => m.fieldName, new { htmlAttributes = new { @class = "form-
control forDecimal" }})
$(document).on("keypress", ".forDecimal", function (evt) {
var charCode = (evt.which) ? evt.which : event.keyCode
var value = $(this).val();
var dotcontains = value.indexOf(".") != -1;
if (dotcontains)
if (charCode == 46) return false;
if (charCode == 46) return true;
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
});