按键事件的计算(或仅按键事件中的数字)
Calculation on keypress event (or number only in keyup event)
我试图计算折扣,并且只允许在折扣字段中使用数字。当我使用keyup事件时,计算是正确的,但我仍然可以键入任何字符,如果我使用keypress事件,对字符的限制有效,但计算不再有效(第一次输入不记录)。
这是我的代码笔:http://codepen.io/mbrillaud/pen/jEzBGy?editors=101
$(document).ready(function(){
var $discount = $('#discount'),
$price = $('#price'),
$newPrice = $('#new-price');
$discount.on('keypress', function(e) {
if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)){
return false;
}
$newPrice.val(
Math.round(
($price.val() - (($discount.val() / 100) * $price.val()))* 100) / 100
);
});
});
我用stackoverflow的答案来核对数字。
提前感谢您的帮助
您可以组合keypress
和keyup
事件来实现这一点。使用keypress
可以防止不需要的字符,使用keyup
可以进行实际计算。
您还必须使用e.stopImmediatePropagation()
来确保keyup
不会继续计算,即使输入了无效字符:
$discount.on('keypress', function(e)
{
if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)){
e.stopImmediatePropagation();
return false;
}
}
.on('keyup change', function(e)
{
$newPrice.val(Math.round(($price.val() - (this.value / 100) * $price.val()))* 100) / 100);
});
我还自由地挂接了change
事件,因此当您删除字符时(使用退格或deletekey),总数也会更新。
请参阅更新的Codepen
像这样使用两个keyup keypress
。
$discount.on('keyup keypress', function(e) {
if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)){
e.stopImmediatePropagation();
return false;
}
但我想在你的代码中,你也禁用了delete, left, right, backspace
,我想用户不会喜欢。
这里有一个更用户友好的功能,它允许number, left, right, backspace, delete
。
function validateQty(event) {
var key = window.event ? event.keyCode : event.which;
if (event.keyCode == 8 || event.keyCode == 46
|| event.keyCode == 37 || event.keyCode == 39) {
return true;
}
else if ( key < 48 || key > 57 ) {
return false;
}
else return true;
};
使用它,做,
$discount.on('keyup keypress', function(e) {
e.stopImmediatePropagation();
return validateQty(e);
}
这里有一个简单的例子,效果很好!
Html代码:
Qty:<input type='text' name='qty' id='qty' value='' /> <br/>
Price:<input type='text' name='price' id='price' /> <br/>
Total:<input type='text' name='total' id='total' /> <br/>
和脚本:
$('#qty, #price').on('input', function () {
var qty = parseInt($('#qty').val());
var price = parseFloat($('#price').val());
$('#total').val((qty * price ? qty * price : 0).toFixed(2));
});
此处测试:DEMO
相关文章:
- 是否可以在数字输入框中的小按钮中添加事件侦听器
- 在粘贴事件Javascript的输入字段中删除所有非数字字符
- 限制用户使用按键事件 injQuery 复制和粘贴声明为数字文本框的文本框中的字符
- 按键事件的计算(或仅按键事件中的数字)
- 任何输入或文本区域中数字字符串的事件侦听器
- 淘汰剑道数字文本框事件
- 如何使用 JavaScript 粘贴事件在 Struts 2 中允许数字
- 在带有键控事件的文本字段中只允许数字和一个点(浮点值)
- 在数字输入中输入小数时触发输入更改事件
- 是事件在Jquery中触发的与其事件绑定数相关联的数字
- 文本框中带有JavaScript onkeypress事件的点后两位数字
- ng模糊don't在firefox上用输入数字触发事件
- 输入数字HTML5:是否有一个事件在每一步都会触发
- 点击事件时将数字推入数组
- 如何在谷歌地图上的每次点击事件中获得x和y数字
- n -keypress事件没有被触发,当-或.按在数字键盘上
- 通过 for 循环绑定的事件中的数字值错误
- 如何在加载事件中将数字转换为单词
- 使用2个函数和onchange事件处理程序计算5个数字的平均值
- 仅当窗口大小低于特定数字时才允许单击事件