按下按键和捕获键获取输入值
Get value of input with keypress and capture key pressed
我正在使用 keypress
event
,我想在按下某个键后在 input
框中获取 value
。我还想捕获按下了哪个键。在 this example 中,我只允许用户在 input
框中输入数字(我知道有一个 number
type
用于输入)。我正在使用 setTimeout
从 input
框中获取 value
。有没有更好的方法来完成这个?这会失败吗?
var elTest = document.getElementById('test');
var elResult = document.getElementById('result');
function isNumber(evt, el) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
evt.preventDefault();
return false;
}
setTimeout(function () {
elResult.textContent = el.value;
}, 0);
return true;
}
elTest.addEventListener('keypress', function(e) {
return isNumber(e, this);
});
<input id='test' />
<div id='result'>
</div>
我认为您刚刚在函数调用期间混合了事件和对象。如果您使用 this.value,那么数字还不会出现,但是如果您使用 event.key(它给出键的字符串值),那么您应该得到正确的输出。
var elTest = document.getElementById('test');
var elResult = document.getElementById('result');
function isNumber(evt, el) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
evt.preventDefault();
return false;
} else {
elResult.textContent += evt.key;
}
return true;
}
elTest.addEventListener('keypress', function(e) {
return isNumber(e, this);
});
<input id='test' />
<div id='result'>
</div>
我会结合使用 keydown 和 keyup 事件侦听器,因为按键事件不会在退格或删除时触发。
按下按键时,检查数字,backspace/delete 输入并在需要时阻止。
在 keyup 上,更新输入值的结果输出。
var elTest = document.getElementById('test');
var elResult = document.getElementById('result');
function allowInput(evt) {
var charCode = (evt.which) ? evt.which : evt.keyCode;
var isNumber = charCode < 58 && charCode > 47;
var isBackspace = charCode == 8 || charCode == 46;
return isNumber || isBackspace;
}
elTest.addEventListener('keydown', function (e) {
if (!allowInput(e)) {
e.preventDefault();
return false;
}
return true;
});
elTest.addEventListener('keyup', function (e) {
elResult.textContent = this.value;
});
我正在使用 keypress
event
,我想在按下某个键后在 input
框中获取 value
。我还想捕获按下了哪个键。在 this example 中,我只允许用户在 input
框中输入数字(我知道有一个 number
type
用于输入)。我正在使用 setTimeout
从 input
框中获取 value
。有没有更好的方法来完成这个?这会失败吗?
var elTest = document.getElementById('test');
var elResult = document.getElementById('result');
function isNumber(evt, el) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
evt.preventDefault();
return false;
}
setTimeout(function () {
elResult.textContent = el.value;
}, 0);
return true;
}
elTest.addEventListener('keypress', function(e) {
return isNumber(e, this);
});
<input id='test' />
<div id='result'>
</div>
我认为您刚刚在函数调用期间混合了事件和对象。如果您使用 this.value,那么数字还不会出现,但是如果您使用 event.key(它给出键的字符串值),那么您应该得到正确的输出。
var elTest = document.getElementById('test');
var elResult = document.getElementById('result');
function isNumber(evt, el) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
evt.preventDefault();
return false;
} else {
elResult.textContent += evt.key;
}
return true;
}
elTest.addEventListener('keypress', function(e) {
return isNumber(e, this);
});
<input id='test' />
<div id='result'>
</div>
我会结合使用 keydown 和 keyup 事件侦听器,因为按键事件不会在退格或删除时触发。
按下按键时,检查数字,backspace/delete 输入并在需要时阻止。
在 keyup 上,更新输入值的结果输出。
var elTest = document.getElementById('test');
var elResult = document.getElementById('result');
function allowInput(evt) {
var charCode = (evt.which) ? evt.which : evt.keyCode;
var isNumber = charCode < 58 && charCode > 47;
var isBackspace = charCode == 8 || charCode == 46;
return isNumber || isBackspace;
}
elTest.addEventListener('keydown', function (e) {
if (!allowInput(e)) {
e.preventDefault();
return false;
}
return true;
});
elTest.addEventListener('keyup', function (e) {
elResult.textContent = this.value;
});