javascript如何处理多级的实时监听

今日工作中遇到需求,要求js代码对表单中的input内容进行实时监听,当input中的值改变时触发一些事件。

按照常规思维,代码很快写完了。

 1 $(function () {
 2           $("#input1").change(function () {
 3               var  vinput1 = $("#input1").val();
 4               $("#input2").val(vinput1 );
 5           });
 6           $("#input2").change(function () {
 7                var  vinput2 = $("#input2").val();
 8                $("#input3").val(vinput2  );
 9           });
10      }) 

但是很快发现有问题:因为实际需求是通过脚本修改input的值,并触发事件,而change事件触发必须满足如下条件:

  1. 当前对象属性改变,并且是由键盘或鼠标事件激发的(脚本触发无效)
  2. 当前对象失去焦点(onblur)

通过查询,propertychange(ie)和input事件很快进入了我的视线范围。

onpropertychange,只要当前对象属性发生改变,都会触发事件,但是它是IE专属的;
oninput是onpropertychange的非IE浏览器版本,支持firefox和opera等浏览器,但有一点不同,它绑定于对象时,并非该对象所有属性改变都能触发事件,它只在对象value值发生改变时奏效。

于是按照网上的方法完成了代码

 1 $(function () {
 2         $("#input1").bind("input propertychange", function () {
 3             var  vinput1 = $("#input1").val();
 4             $("#input2").val(vinput1 );
 5         });
 6         $("#input2").bind("input propertychange", function () {
 7              var  vinput2 = $("#input2").val();
 8              $("#input3").val(vinput2  );
 9         });
10     }) 

但是很快,我又发现了问题:就是通过鼠标键盘或js操作input1控件的值,确实可以触发相应事件进而修改input2的值。但是input2的值被修改后,无法触发它自己的事件去修改input3的值。

我猜测可能input和propertychange可能不支持级联触发。

于是我尝试通过trigger手动触发下级控件的input和propertychange事件,将代码修改成这样:

 1 $(function () {
 2         $("#input1").bind("input propertychange", function () {
 3            var vinput1 = $("#input1").val();
 4            $("#input2").val(vinput1);
 5            $("#input2").trigger("input");
 6            $("#input2").trigger("propertychange");
 7         });
 8         $("#input2").bind("input propertychange", function () {
 9             var vinput2 = $("#input2").val();
10            $("#input3").val(vinput2);
11         });
12     })  

通过实验,证明可以通过这种方式进行多级的input内容修改监听。

但是这种方式也有自己的问题:它需要手动指定并通过trigger触发,如果要触发很多层,或不知道下一层是哪一个控件的话,就很难保证代码的清晰和整洁了。

 

转载于:https://www.cnblogs.com/wenpeng/p/8336447.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值