原生html + javascript
<body>
<!-- html代码 -->
<div id="box">请输入销量:
<input class="input_value" />
</div>
<!-- js脚本引入 -->
<script type="text/javascript">
// step1: 获取元素
var obj = document.querySelector("#box .input_value");
// step2: 添加事件
obj.oninput = function() {
var _this = this; // 为防止this指向改变
var reg = isNaN(_this.value); // 验证this.value是否为数字
if (reg) { // 如果this.value不为数字,则reg为true
_this.value = _this.value.replace(/[^1-9]*$/g, '')
}
if (_this.value === '0') { // 此步想“ 阻止 ”用户输入的首个数字为0
_this.value = _this.value.replace(/^[^1-9]/g, '')
}
}
</script>
</body>
vue + element-ui
html vue-run <template> <el-input v-model="price" @input.native="number($event)" placeholder="请输入"></el-input> <!-- 此处使用.native的原因:因为keyup是原生js提供的键盘事件,但是现在我使用的是element-ui框架,elementUi上面的input组件监听事件是没有这个事件的,所以我们需要加个vue事件的修饰符 .native,代表原生事件的意思。 --> </template> <script> export default { data() { return { price: ‘‘ }; }, methods: { number (e) { var _value = e.target.value; // 获取到输入框的value值 const reg = isNaN(_value); // 判断拿到的value是否为数字 if (reg) { // 若为非数字键,则全部替换为空 e.target.value = _value.replace(/[^1-9]/g, ‘‘); } if (_value === ‘0‘) { // 若为0,则替换为空 e.target.value = _value.replace(/^[^1-9]/g, ‘‘) } } } } </script>
大学毕业自学前端,刚入职场不到两个月。这两天手头上的项目有一个需求是:input输入框如何只能输入非零开头的正整数,在用户输入的过程中,如果输入的东西不满足条件的话,则不会同步显示在输入框内。
html vue-run <template> <el-input v-model="price" @keyup.native = "value=value.replace(/[^\d]/g,‘‘)" placeholder="请输入"></el-input> </template>
接下来,我转向了onkeydown事件,因为keydown事件是在用户按下键盘上的任意键时触发,我的思路是,我只要我想要的键盘上的任意键起作用,其他的按键全部禁用就可以了。于是我找到了每一个键的keycode,只保留了我想要的按键,其他的全部禁用。经过几次测试,我发现只有在英文输入法状态下我的代码才奏效,在中文输入法状态下丝毫不起作用,此时我的思路发生了转变,我开始研究其他的事件。
html vue-run <template> <el-input v-model="price" @change.native = "value=value.replace(/[^\d]/g,‘‘)" placeholder="请输入"></el-input> </template>
onInput事件:使用oninput事件,完美解决了以上种种问题。oninput可以实时监听到用户输入的东西,对于那些非数字的,就可以使用正则找到并且替换为空,那么不管在中文状态下,还是英文状态下,都生效。
事件名称(Event Name) | 事件描述(Event Des) |
---|---|
keyup | 当用户释放键盘上的字符键时触发 |
keydown | 当用户按下键盘上的任意键时触发,如果按住不放的话,会重复触发此事件 |
keypress | 当用户按下键盘上的字符键时触发,如果按住不放的话,会重复触发此事件 |
change | 在内容改变(两次内容有可能还是相等的)且失去焦点时触发 |
focus | 在对象获得焦点时发生 |
input | 在用户输入时立即触发 |
- 字符键:能打出字符的就是字符键,如1,a,空格,回车,数字(注意:包括Shift+数字的符号)、字母(注意:包括大小写)、小键盘
原文:https://www.cnblogs.com/VeraYao/p/10833882.html