javascript如何处理多级的实时监听
今日工作中遇到需求,要求js代码对表单中的input内容进行实时监听,当input中的值改变时触发一些事件。
按照常规思维,代码很快写完了。
$(function () {
$("#input1").change(function () {
var vinput1 = $("#input1").val();
$("#input2").val(vinput1 );
});
$("#input2").change(function () {
var vinput2 = $("#input2").val();
$("#input3").val(vinput2 );
});
})
但是很快发现有问题:因为实际需求是通过脚本修改input的值,并触发事件,而change事件触发必须满足如下条件:
- 当前对象属性改变,并且是由键盘或鼠标事件激发的(脚本触发无效)
- 当前对象失去焦点(onblur)
通过查询,propertychange(ie)和input事件很快进入了我的视线范围。
于是按照网上的方法完成了代码
$(function () {
$("#input1").bind("input propertychange", function () {
var vinput1 = $("#input1").val();
$("#input2").val(vinput1 );
});
$("#input2").bind("input propertychange", function () {
var vinput2 = $("#input2").val();
$("#input3").val(vinput2 );
});
})
但是很快,我又发现了问题:就是通过鼠标键盘或js操作input1控件的值,确实可以触发相应事件进而修改input2的值。但是input2的值被修改后,无法触发它自己的事件去修改input3的值。
我猜测可能input和propertychange可能不支持级联触发。
于是我尝试通过trigger手动触发下级控件的input和propertychange事件,将代码修改成这样:
$(function () {
$("#input1").bind("input propertychange", function () {
var vinput1 = $("#input1").val();
$("#input2").val(vinput1);
$("#input2").trigger("input");
$("#input2").trigger("propertychange");
});
$("#input2").bind("input propertychange", function () {
var vinput2 = $("#input2").val();
$("#input3").val(vinput2);
});
})
通过实验,证明可以通过这种方式进行多级的input内容修改监听。
但是这种方式也有自己的问题:它需要手动指定并通过trigger触发,如果要触发很多层,或不知道下一层是哪一个控件的话,就很难保证代码的清晰和整洁了。
javascript如何处理多级的实时监听的更多相关文章
- 实时监听 JavaScript改变 input 值 input输入框内容 value 变化实时监听
思路:通过setInterval()方法去定时对比新旧值 当时候JavaScript的onchange 和onpropertychange(注意ie版本) 监听输入框input时间,人为改变值是可以触 ...
- javascript --- 实时监听输入框值的变化
实时监听文本框值变化是非常常见的功能,通常最简单的办法就是用keyup,keydown来实现,但是这种方法有两个问题,一个是当直接复制粘贴的时候没法监听到事件,另外一个问题是在移动端,使用删除键删除输 ...
- js 实时监听input中值变化
注意:用到了jquery需要引入jquery.min.js. 需求: 1.每个地方需要分别打分,总分为100; 2.第一个打分总分为40; 3.第二个打分总分为60. 注意:需要判断null.&quo ...
- 实时监听input输入框value的变化:
HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件实时监听输入框value的变化 oninput 事件在用户输入时触发. 该事件在 <input&g ...
- 移动端用js与jquery实时监听输入框值的改动
背景: 在一次移动端H5开发中,需要监听输入框值的实时变动. onchange事件肯定抛弃,因为只能失去焦点才触发. 而keyPress在Android可以触发,iOS不可以. 又不想用Android ...
- 实时监听输入框值变化的完美方案:oninput & onpropertychange
实时监听输入框值变化的完美方案:oninput & onpropertychange: 网址:http://www.cnblogs.com/lhb25/archive/2012/11/30/o ...
- input实时监听(input oninput propertychange onpropertychange)
本文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时 ...
- js与jquery实时监听输入框值变化方法
本文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时 ...
- Android实时监听网络状态
Android实时监听网络状态(1) 其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就 ...
随机推荐
- centos7 yum 安装 redis
//从中国科学技术大学开源镜像站 wget http://mirrors.ustc.edu.cn/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.r ...
- 在一个终端后台运行的进程在新的终端中使用job不会被发现
我在一个终端后台运行了一个程序.之后由于工作需要又新开了一个新的终端.在新的终端中,我想查看后台程序的运行状态,输入jobs时,发现没有后台任务运行.难道我的程序死掉了?我接着top了下,发现我的后台 ...
- Python学习_01_对象
之前关于python的知识比较零散,这一个系列的随笔将python重新学习整理一遍.学习书籍<Python核心编程>第二版. Python对象基础 python并不是一个单纯面向对象的语言 ...
- Life in Changsha 第一次scrum冲刺
第一次冲刺任务 基于大局的全面性功能框架定位,要求能实现用户基于自己的需求进行的一系列操作. 用户故事 用户打开“生活在长大”的界面 程序首页展示校园服务,论坛等相关信息 用户选择某个功能 程序界面跳 ...
- grep命令及基本正则表达式
grep命令是Linux系统中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功 ...
- Oracle相关知识做个总结
一.创建用户: 以系统管理员登陆,右键点击Uers进行新建, 一般:默认空间选择USERS,临时表空间选择TEMP,概要文件选择DEFAULT. 对象权限:不做操作. 角色权限:1.connect 2 ...
- Java学习笔记-嵌套类
嵌套类 嵌套类有两种类别:static and non-static,分别对应为静态嵌套类和内部类. class OuterClass { ... static class StaticNestedC ...
- IIFF(立即执行函数表达式)
立即执行函数表达式(Immediately-invoked function expression,IIFF) 在javascript(ES5)中,是没有块级作用域的概念的 for (var i = ...
- Mongodb集群【三】
Mongodb常用三种集群 1 主从(Master/Slave) 不推荐,但是mongodb依然保留有.一主多从,不支持链式结构.简单主从,没有裁仲者不能自动恢复. 2 副本集(Relica Set) ...
- 【HTML初识】
一.BS模式 BS(Browser-Server)模式:顾名思义为浏览器-服务器的意思,对比的话类似我们PC上面浏览器使用的产品即为BS模式产品,例如google doc.各类网站等. 服务端开启一个 ...