一、前言

在MVVM模式下,有个双向数据绑定data-binding)的优势,可以通过viewmodel实时的监听用户操作,也可以将model的改动实时的反馈到界面上。

那么,在传统的js操控DOM的情况下如何实现呢?

下面我们以输入框(input)为例,对用户的操作进行监听,并实时的反馈给用户

二、正文

1)控制输入框的输入

//控制输入框的输入==只能输入四位,且必须是数字和字母
$(node).attr("onkeyup", "if(this.value.length>4){this.value=this.value.substr(0,4)};value=value.replace(/[^0-9A-Za-z]/g, '')"); $(node).attr("onpaste", "if(this.value.length>4){this.value=this.value.substr(0,4)};value=value.replace(/[^0-9A-Za-z]/g, '')"); $(node).attr("oncontextmenu", "if(this.value.length>4){this.value=this.value.substr(0,4)};value=value.replace(/[^0-9A-Za-z]/g, '')");
  • onpaste="return false;" 禁止向控件粘贴内容
  • oncopy="return false;" 禁止复制
  • oncut="return false;" 禁止剪贴
  • oncontextmenu="return false;" 禁止使用右键
上面代码的:onkeyup表示侦听键盘输入事件;
      onpaste表示侦听浏览器粘贴事件;
      oncontextmenu表示侦听鼠标右键事件;

2)通过监听输入对页面进行反馈

  上面的代码虽然可以通过监听事件来控制输入框的输入,但他是通过添加属性的方式,无法通过监听情况进行数据反馈

//通过侦听输入框,实时显示输入字符
if(/msie/i.test(navigator.userAgent)){
document.querySelector("input").addEventListener("propertychange", function(){
var input_value = document.querySelector("input").value;
document.querySelector(".value").innerHTML = input_value /10;
})
}else{
document.querySelector("input").addEventListener("input", function(){
var input_value = document.querySelector("input").value;
document.querySelector(".value").innerHTML = input_value /10;
})
}
/msie/i.test(navigator.userAgent)可以进行浏览器内核判断,区分IE和非IE
IE使用propertychange,非IE使用input事件,
通过监听输入框的每一次输入,来实时的反馈显示给用户。

3)输入框的输入长度限制

不要通过监听事件来进行长度限制,直接使用input自带的maxlength进行

<input name="" type="text" maxlength="4" placeholder="">

三、结语

  MVVM模式能够很好的实现数据绑定,以上的方法只是传统JS下无奈的选择,建议还是早早的拥抱框架吧

input实时监听控制输入框的输入内容和长度,并进行提示和反馈的更多相关文章

  1. input实时监听(input oninput propertychange onpropertychange)

    本文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时 ...

  2. input实时监听value change

    oninput ie9+,otheronpropertychange  ie6-8 js使用 var el = docuemnt.getElementById('id'); if('oninput' ...

  3. EditText 详细信息(监听事件时,输入改变、透明背景、提示改变文字颜色、密文输入)

    1.对EditText输入监视.给EditText 捆绑 addTextChangedListener 监控事件 能够. 2.EditText输入内容.密文显示: android:password=& ...

  4. jquery input 实时监听输入

    $('input').bind('input propertychange', function() { alert('hello world') });

  5. input实时监听

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  6. vue-搜索功能-实时监听搜索框的输入,N毫秒请求一次数据

    <template> <div class="search-box"> <input class="box" :placehold ...

  7. 实时监听input输入框value的变化:

    HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件实时监听输入框value的变化 oninput 事件在用户输入时触发. 该事件在 <input&g ...

  8. 实时监听input输入内容的N种方法

    现在有一个需求,需要我们实时监听input输入框中的内容,从而带来更好的用户体验,而不是等我们全部输入完毕才告诉我们格式不对首先我们创建一个input输入框 <form name='loginF ...

  9. 实时监听input标签输入 实时监听文本框输入 避免中文输入法无法触发onkeyup事件的问题

    前言: 对于实时监听输入,这种需求大多数都是用于一个联想字提醒,智能提醒.大家都知道onkeydown,onkeypress,onkeyup的在监听中文输入法或者右键粘贴的时候都存在一些弊端,不是那么 ...

随机推荐

  1. 流程设计器jQuery + svg/vml(Demo6 - 增加结点属性及切换)

    到目前流程设计器流程结点的拖拽操作已基本完成,接下来就到结点的属性开发了.前面已经开发过流程模板的属性了,结点属性跟模板属性类似,从属性模板定义copy一份,然后按各结点类型进行调整就ok. 1.先来 ...

  2. maven+jmeter+jenkins集成

    马上要国庆了,最近比较忙,但是感觉忙的效率很一般,之前写过ant的集成,这两天研究了下maven,其中核心的插件便是jmeter-maven-plugin,要想了解更多的朋友,可以自行去官网wiki学 ...

  3. mysql alter修改字段的长度 类型sql语句

    在mysql中alter命令可以修改字段类型,长度,名称或一些其它的参数,下面我来给大家介绍alter函数修改字段长度与类型的两个命令,希望文章来给各位带来帮助.     mysql 修改字段长度 a ...

  4. 通过iframe 实现upload file无刷新

    <html>    <head> </head> <body> <form encType="multipart/form-data&q ...

  5. linux 下的php_gd2.dll

    今天写验证码时,发现要配置php.ini,单不知在哪儿,用下面的办法可以解决. <?php phpinfo(); ?> 用vim搜索字符串时,发现一个命令特别好用 /字符串 就可以搜索到字 ...

  6. Ext.js 之MVC

    Ext.js 4.0之MVC

  7. 数据库Job定时任务

    数据库Job再熟悉不过了,因为经常要数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等等的工作.但是,Oracle定时器Job时间的处理上,千变万化,今 ...

  8. 解决内部元素onMouseOver/onMouseOut事件冒泡触发父元素的相应事件

    前阵子为BS项目模板做了一个左侧滑动信息栏,效果类似于windows状态栏的自动隐藏效果,鼠标移进滑出,鼠标移出隐藏,浮动时不占用空间,也可以固定住占一块位置.做的过程中遇到一个问题,鼠标在信息栏内部 ...

  9. Brackets编辑器使用

    常用快捷操作 Ctrl + b 当选中一个文本时,离该文本最近的相同的文本会被高亮显示,这样,相同的2个文本就全部获得了焦点,可以同时更改高亮文本.(对,只会找寻最近的且只找到一个就不找了!惰性查找. ...

  10. Git自动换行符

    http://blog.csdn.net/jonathan321/article/details/51988242?locationNum=2 不同的操作系统有不同的换行符格式,跨平台协作时需要考虑版 ...