javascript - 退格键未清除 mozilla 浏览器中的字段

标签 javascript jquery html

我的输入框只允许输入数字。在 chrome 和 firefox 中它只允许输入数字,但在 mozilla 中使用退格键无法删除数字。

$(document).ready(function () {
$('#price').keypress(function(event) {
		if ((event.which != 46 || $(this).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
			event.preventDefault();
		}
	});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='price'>

最佳答案

通常keypress仅检测可打印按键,但当前版本的Mozilla也能够检测退格键。请改用 keydown 事件。

演示

$(document).ready(function() {
  $('#price').keydown(function(event) {
    console.log(event.which);
    if ((event.which != 46 || $(this).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
      event.preventDefault();
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='price'>

另一种方法 重要!

使用上述方法,您还必须检查其他特殊键,例如箭头键和删除键,更不用说 . 是否放置正确且仅放置一次。

另一种方法可能是简单地从 keyup 上的字符串中删除非数字字符

$(document).ready(function() {
  $('#price').keyup(function(event) {
     this.value = this.value.replace( /[^0-9.]/g, "" );
     this.value = this.value.split(".").reduce((a,b,i)=> i > 1 ? a+b : a+"."+b );
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='price'>

关于javascript - 退格键未清除 mozilla 浏览器中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47300416/

相关文章:

javascript - 在 Javascript/Ajax 中使用 PHP 变量而不在检查元素中显示

javascript - ES6对象中的方法: using arrow functions

javascript - 在 promise 中使用这个

javascript - 将 (this) 与动态内容一起使用 jQuery

javascript - Jquery 从 HTMLElement 获取单个元素

javascript - 弹出窗口内的 JQuery UI Datepicker

javascript - 点击时,如何让音频一直播放?

javascript - 隐藏和替换 html 内容和数据属性值

php - 如何访问从 codeigniter 中的查询传递的数据

javascript - 在松开手指之前不显示背景色