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
-----------------------------------------------------------------

posted @ 2017-06-24 22:02  永醉雨辰  阅读(5390)  评论(0编辑  收藏  举报