一、前言

在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. Codeforces 989A:A Blend of Springtime

    A. A Blend of Springtime time limit per test 1 second memory limit per test 256 megabytes input stan ...

  2. 线上服务器TCP被打满是啥情况

    从一个线上服务器警告谈谈backlog https://wangxiangnan.cc/?p=105 缘起 双十一如期而至,此时的我因为在处理客户的一个问题已经陷入了忙碌.突然,不断接到驻场实施发来的 ...

  3. mysql中的隐式转换

    在mysql查询中,当查询条件左右两侧类型不匹配的时候会发生隐式转换,可能导致查询无法使用索引.下面分析两种隐式转换的情况 看表结构 phone为 int类型,name为 varchar EXPLAI ...

  4. LG4777 【模板】扩展中国剩余定理(EXCRT)

    题意 题目描述 给定\(n\)组非负整数\(a_i, b_i\),求解关于\(x\)的方程组 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\e ...

  5. ES6必知必会 (八)—— async 函数

    async 函数 1.ES2017 标准引入了 async 函数,它是对 Generator 函数的改进 , 我们先看一个读取文件的例子: Generator 写法是这样的 : var fs = re ...

  6. Oracle SEQUENCE 具体说明

     ORACLE  SEQUENCE     ORACLE没有自增数据类型,如需生成业务无关的主键列或惟一约束列,能够用sequence序列实现. CREATE SEQUENCE语句及參数介绍: 创建序 ...

  7. Java多线程编程核心技术,第五章

    1,Timer timer = new Timer(true)现在是守护进程 2,timer是按照顺的,没有异步 3,timer方法,schedule(TimerTask task, Date fir ...

  8. RK3288 GT触摸屏移植调试

    CPU:RK3288 系统:Android 5.1 IC:GT911 1.在 menuconfig 或者 rockchip_defconfig 中支持触摸屏.具体用哪种方式需要结合编译方法. 按照瑞芯 ...

  9. 函数前修饰const与函数名后修饰const

    #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #inc ...

  10. 在Form Load中设置showInTaskBar =false 或 隐藏窗口 this.Hide()时会导致注册的全局快捷键无效

    在Form Load中设置showInTaskBar =false   或 隐藏窗口 this.Hide() 会导致注册的全局快捷键无效.  反正是其中一个,有点记不清了. 在Form Shown中s ...