html5标准事件oninput实现输入检测

       以往我们实现input的输入监听用到的无非是onkeyup、onkeydown、onchange,但是这些都有着一些不好的用户体验。比如onchange事件只在键盘或者鼠标操作改变对象属性,且失去焦点时触发,脚本触发无效;而onkeydown、onkeyup在处理复制、粘贴、拖拽、长按键(按住键盘不放)等细节上并不完善。

       onpropertychange属性可在某些情况下解决上面存在的问题,不用考虑是否失去焦点,不管js操作还是键盘鼠标手动操作,只要HTML元素属性发生改变即可立即捕获到。遗憾的是,onpropertychange为IE专属的。其他浏览器下如果想要实现这一实时监听的需求,就要用到HTML5中的标准事件oninput,不过IE9以下的浏览器是不支持oninput事件的。如果要兼容IE9以下浏览器,就需要oninput和onpropertychange一起使用。

如下实例:

!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="Author" content="神棍、Falost">
        <title>hello world!</title>
        <style type="text/css">
            #box{
                width:100%;
                height:30px;
            }
        </style>
    </head>
    <body>
        <div id="box"></div>
        <input type="text" οninput="Monitor(this)" onpropertychange="Monitor(this)"/>
        
        <script type="text/javascript">
            function Monitor(t){
                console.log(t.value)
                var box = document.getElementById('box')
                box.innerHTML = '你当前输入的是:'+ t.value
            }
        </script>
    </body>
</html>


实时监听input中输入内容的变化。

 

转载于:https://www.cnblogs.com/zhaoleilei/p/6656486.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 实现Vue输入框只能输入整数的方法有以下几种: 1. 使用正则表达式验证:可以通过在输入框的`input`事件中监听用户输入的内容,并使用正则表达式进行验证。在Vue中可以通过指令`v-model`和`@input`来实现这一功能。代码如下: ```html <template> <div> <input type="text" v-model="inputValue" @input="handleInput"> </div> </template> <script> export default { data() { return { inputValue: '' } }, methods: { handleInput() { this.inputValue = this.inputValue.replace(/\D/g, ''); } } } </script> ``` 在`handleInput`方法中,使用`this.inputValue.replace(/\D/g, '')`将非数字的字符替换为空字符,从而只保留输入框中的数字。 2. 使用自定义指令:Vue中的自定义指令可以方便我们对DOM元素进行操作和控制。代码如下: ```html <template> <div> <input type="text" v-model="inputValue" v-number> </div> </template> <script> export default { data() { return { inputValue: '' } }, directives: { number: { bind(el) { el.handler = function() { el.value = el.value.replace(/\D/g, ''); }; el.addEventListener('input', el.handler); }, unbind(el) { el.removeEventListener('input', el.handler); } } } } </script> ``` 在自定义指令`number`的`bind`方法中,定义了一个事件处理函数`el.handler`,处理函数将非数字的字符替换为空字符。然后通过`addEventListener`将事件绑定到输入框的`input`事件上,从而实现只能输入整数的效果。在`unbind`方法中,解绑了事件防止内存泄漏。 无论是使用正则表达式验证还是自定义指令,在输入框中输入非数字的字符就会被过滤,只保留整数。 ### 回答2: Vue中的输入框默认是可以输入任意字符的,包括整数、小数和其他特殊字符。但是我们可以通过限制输入的字符类型,使输入框只能输入整数。 一种常用的方法是使用Vue的指令,通过监听输入框的输入事件检测输入的字符是否为整数。如果不是整数,则阻止字符的输入。 在Vue模板中,我们可以这样定义一个输入框: ``` <input v-model="num" v-on:input="checkInt" type="text"> ``` 在Vue实例中,我们可以定义checkInt方法来检测输入的字符是否为整数: ``` data() { return { num: '' } }, methods: { checkInt() { // 使用正则表达式检查输入的字符是否为整数 this.num = this.num.replace(/\D/g, ''); } } ``` 在checkInt方法中,我们使用了正则表达式`\D`来匹配非数字字符,然后使用replace方法将非数字字符替换为空字符串,从而只保留整数部分。 通过这样的设置,我们就可以实现只能输入整数的输入框了。当用户输入一个非数字字符时,它会在输入框中被直接删除。注意,这种方法只是在用户输入的时候进行限制,如果通过其他方式改变输入框的值(比如通过代码动态设置输入框的值),这些限制就不会生效了。 ### 回答3: 在Vue中,可以通过一些方法实现只允许输入整数的输入框。以下是一种可能的解决方案: 1. 使用Vue的v-model指令绑定输入框的值,例如:v-model="inputValue"。 2. 在Vue的data选项中定义inputValue变量,用于保存输入框的值。 3. 使用Vue的watch选项来监测inputValue的变化,当其发生变化时执行相应的操作。 4. 在watch选项中,使用正则表达式来判断inputValue是否为整数,如果不是整数,则将其设置为最近一次的有效整数输入值。 5. 在输入框的模板中,可以加入input事件监听函数,当输入框的值发生变化时,触发该函数。 6. 在input事件监听函数中,可以使用JavaScript的isNaN()函数来判断输入的值是否为数字,如果不是数字,则设置输入框的值为最近一次的有效整数输入值。 上述方法的实现思路是通过监测输入框的值的变化,当输入框的值不符合要求时,将其重置为最近一次的有效整数输入值。这样就可以保证输入框只能输入整数。注意,这只是一种解决方案,并不是唯一的方法。根据具体需求,也可以采用其他方式实现限制输入整数的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值