textarea change实时监听触发

本文探讨了在不同设备上实现文本输入实时监听的挑战,尤其是在移动设备上的兼容性问题。介绍了使用keyup、change、propertychange及input事件的区别和适用场景,最终提供了一种跨平台的解决方案。
摘要由CSDN通过智能技术生成

textarea change实时监听触发

在此次迭代中,留言回复模块中有一个输入字符,计算剩余字数的功能。本不是什么大功能,但是需要兼容pc和移动。

留言回复

是利用keyup(当键盘毽子弹起)事件方法进行计算,做的时候就担心移动,pc是肯定是好用的。不知道移动能不能识别,毕竟它的键盘和真实的键盘有区别。功能做完后,赶快用手机去测试,发现是好用的,暗暗欣喜,就和qa说留言做好了,可以测试了。在qa的专业测试后,说复制粘贴后的内容,剩余字数不变...

$('#text').keyup(function(){
       var curLength=$(that._els.replay).val().trim().length;
       if(curLength>140)
            {
                var num=$(that._els.replay).val().trim().substr(0,140);
                $(that._els.replay).val(num);
                //alert("超过字数限制,多出的字将被截断!" );
            }
            $("#textCount").text($(that._els.replay).val().trim().length);
        }
 });

因为粘贴的事件并不属于keyup,所以并不能识别。然后就换了一个change事件,可是问题有来了,换成change之后,死活不触发事件。查了一下资料,原来:

change事件在内容改变(两次内容有可能是相等的)且失去焦点时触发

代替事件

propertychange事件实时触发,即每增加一个字符或者删除一个字符就会触发,通过js也会触发(任何属性改变),但是该事件为ie专有
input是ie之外大多数浏览器支持的事件,在value改变时触发,实时的。然而,通过js改变时,却不会触发

用jquery实现方法

$('#text').bind('input propertychange','textarea',function(){
       var curLength=$(that._els.replay).val().trim().length;
       if(curLength>140)
            {
                var num=$(that._els.replay).val().trim().substr(0,140);
                $(that._els.replay).val(num);
                //alert("超过字数限制,多出的字将被截断!" );
            }
            $("#textCount").text($(that._els.replay).val().trim().length);
        }
 });

注意!input和propertychange要通过动态绑定来实现。

其中还遇到的问题是最开始的时候以为bind后面的input为html的元素,如果是textarea只需要把input换成textarea就可以。不然,此处的input是指jquery里面input事件,不要混淆。指定是input还是textarea需要在绑定的事件之后。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值