Onkeydown
,我运行以下JavaScript:
function ThisOnKeyDown(el) {
if (el.title == 'textonly') {
!(/^[A-Za-zÑñ-\s]*$/i).test(el.value) ? el.value = el.value.replace(/[^A-Za-zÑñ-\s]/ig, '') : null;
}
if (el.title == 'numbersonly') {
!(/^[0-9]*$/i).test(el.value) ? el.value = el.value.replace(/[^0-9]/ig, '') : null;
}
if (el.title == 'textandnumbers') {
!(/^[A-Za-zÑñ0-9-\s]*$/i).test(el.value) ? el.value = el.value.replace(/[^A-Za-zÑñ0-9-\s]/ig, '') : null;
}
}
这三个标题属性中的一个被赋予页面上的各种输入字段。只要无效字符被正确删除,代码就会起作用,但直到输入下一个字符为止。我想找到一种简单地拒绝无效输入的方法。感谢您的帮助!
修改:我全局创建活动。我是这样做的:
function Globalization() {
var inputs = document.getElementsByTagName('input');
for (i = 0; i < inputs.length; i++) {
inputs[i].onfocus = createEventHandler(
ThisOnFocus, inputs[i]);
inputs[i].onblur = createEventHandler(
ThisOnBlur, inputs[i]);
inputs[i].onkeydown = createEventHandler(
ThisOnKeyDown, inputs[i]);
inputs[i].onkeyup = createEventHandler(
ThisOnKeyUp, inputs[i]);
}
}
Globalization()
正在运行body.onload
因此,典型的输入字段包含没有函数调用的HTML,如下所示:
<input id="AppFirstName" style="width: 150px;" type="text" maxlength="30" title="textonly"/>
答案 0 :(得分:20)
要防止首先设置它,可以在keydown事件处理程序上返回false,从而防止事件进一步传播。
我使用jQuery编写了下面的示例,但是在传统绑定时可以使用相同的函数。
虽然在服务器端验证也很重要,但为了用户友好,客户端验证很重要。
$("input.number-only").bind({
keydown: function(e) {
if (e.shiftKey === true ) {
if (e.which == 9) {
return true;
}
return false;
}
if (e.which > 57) {
return false;
}
if (e.which==32) {
return false;
}
return true;
}
});
答案 1 :(得分:4)
上面的代码说它只允许数字。您可以通过添加异常来修改它,例如BACKSPACE,例如
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
function keyispressed(e){
var charval= String.fromCharCode(e.keyCode);
if((isNaN(charValue)) && (e.which != 8 )){ // BSP KB code is 8
e.preventDefault();
}
return true;
}
</script>
</head>
<body>
<input type="text" onkeydown="return keyispressed(event);"/>
</body>
</html>
答案 2 :(得分:2)
代码对于防止用户键入除数字之外的任何其他字符非常有用。
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
function keyispressed(e){
var charval= String.fromCharCode(e.keyCode);
if(isNaN(charval)){
return false;
}
return true;
}
</script>
</head>
<body>
<input type="text" onkeydown="return keyispressed(event);"/>
</body>
</html>
答案 3 :(得分:1)
我在http://help.dottoro.com/ljlkwans.php
中找到了这个解决方案按预期工作。
<script type="text/javascript">
function FilterInput (event) {
var keyCode = ('which' in event) ? event.which : event.keyCode;
isNumeric = (keyCode >= 48 /* KeyboardEvent.DOM_VK_0 */ && keyCode <= 57 /* KeyboardEvent.DOM_VK_9 */) ||
(keyCode >= 96 /* KeyboardEvent.DOM_VK_NUMPAD0 */ && keyCode <= 105 /* KeyboardEvent.DOM_VK_NUMPAD9 */);
modifiers = (event.altKey || event.ctrlKey || event.shiftKey);
return !isNumeric || modifiers;
}
</script>
< body>
The following text field does not accept numeric input:
<input type="text" onkeydown="return FilterInput (event)" />< /body>
它允许文本和!“#$%&amp ;;但是你可以调整它,将这些添加到验证中,只通过删除回复中的!来允许数字
答案 4 :(得分:0)
针对onkeyup事件而不是onkeydown事件运行代码。通过这种方式,您可以访问最后一次按键的结果,其中onkeyup事件执行时按下按键而不知道其结果。
答案 5 :(得分:0)
$('.key-filter').keypress(function () {
if (event.key.replace(/[^\w\-.]/g,'')=='') event.preventDefault();
});
然后使用jquery将键过滤器类添加到输入中 或
<input type="text" onkeypress="if (event.key.replace(/[^\w\-.]/g,'')=='') event.preventDefault();" />
在^后面的[]中放入你想要允许的字符。 这允许所有字母数字_ - 和。
答案 6 :(得分:0)
您可以在单个html行中轻松完成此操作。
像这样禁止空格:
src: parts.map(({ type, name }) => `htdocs/${type}/${name}/*.js`),
或者这仅允许数字:
add_action('pa_brand_edit_form_fields','msp_pa_brand_form_fields');
add_action('pa_brand_add_form_fields','msp_pa_brand_form_fields');
function msp_pa_brand_form_fields () {
?>
<tr class="form-field">
<th valign="top" scope="row">
<label for="display"><?php _e('Display Type', ''); ?></label>
</th>
<td>
<select name="display_type">
<option value="select">Select</option>
<option value="variation_image">Variation Image w/ label</option>
</select>
</td>
</tr>
<?php
}
只需查找要允许或不允许的任何数字中的unicode。
答案 7 :(得分:0)
您可以在“输入”事件期间替换您的输入值:
// <input oninput=onInput(event) />
const onInput = event => {
event.target.value = event.target.value.replace(/[^0-9+]/g, '')
}