oninput事件(解决onkeyup无法监听到复制黏贴)

change事件需要两个条件触发:
   a)当前对象属性改变,并且是由键盘或鼠标事件激发的(脚本触发无效)
   b)当前对象失去焦点(onblur) 

  keypress  能监听键盘事件,但鼠标复制黏贴操作就无能为力

HTML5 出现的input事件: 只要输入框内容发生变化即可触发(IE: propertychange)
---------------------
文本域输入字符有限制 如最多125个字符。 一般可以用 max属性
<textarea id="appy-reason" max="125"></textarea>

但textarea按enter键,会导致统计字数不一致
max认为125个字符时,用angular.element("#appy-reason).val().length统计出124个字符
这是因为enter键 :
有的系统 \n\r(<换行><回车> 2个字符)
有的系统 '\r'是回车,'\n'是换行(一个字符)
所以抛弃max属性 ,利用onkeyup事件自己计算
-----------------------------------------------------------------

onkeyup无法监听到复制黏贴导致的内容变化,可以使用oninput事件

注:IE下 用 onpropertychange

<textarea
 ng-keydown = "addReason(event)"
 oninput = "angular.element(this).scope().addReason(event)"
 onproperty = "angular.element(this).scope().addReason(event)">
 
 </textarea>
ng-keydown 要注意backspace键和delete键 字数-1
enter键,应该注意阻止事件冒泡
----------------------------------------------------------------
键盘与文本事件
按键顺序:
keydown > keypress > keyup
keydown\ keypress 发生在文本变化之前 (keypress监听不到backspace键和delete键)

backspace键 keyCode:8
delete键 keyCode:46
enter键    keyCode:13
-----------------------------------------------------------------
 

转载于:https://www.cnblogs.com/zyjzz/p/7074610.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在 Vue 中使用 `el-input` 组件并尝试结合 `oninput` 或 `onkeyup` 事件监听器与 `v-model` 双向数据绑定时,可能会遇到一个问题。这是因为 `v-model` 实际上是在底层自动触发 `input` 事件的,而当你手动添加了如 `oninput` 或 `onkeyup` 进行特定处理(例如实时验证、计数等),你可能无意中阻止了原始的 `input` 事件的自然触发。 Vue 期望每次 `input` 事件发生时都能更新视图和数据模型同步。如果你直接操作 DOM 修改了输入值,并没有让 Vue 内部跟踪到这个变化,那么 `v-model` 的双向绑定就不再生效。 为了解决这个问题,你需要确保: 1. **不阻止原生的 input 事件**:避免在 `oninput` 或 `onkeyup` 中调用 `event.preventDefault()` 或 `event.stopPropagation()` 来阻止默认行为,这样 Vue 的双向绑定才能正常工作。 2. **手动触发更新**:如果需要对输入进行自定义处理后更新模型,你应该在事件回调中手动调用 `this.$set(this, 'modelProperty', inputValue)`,这会告诉 Vue 触发视图的重新渲染。 ```javascript <input v-model="modelValue" @input="handleInput"> ... methods: { handleInput(event) { // 不阻止事件 this.modelValue = event.target.value; // 或者手动触发更新 this.$set(this, 'modelValue', event.target.value); } } ``` 记住,使用 `v-model` 已经包含了大部分基本的输入事件处理,除非有特殊需求,否则一般情况下不需要另外添加 `oninput` 或 `onkeyup`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值