实时监听移动端输入框的变化

一个常见需求,实时监听textarea的输入变化,并在页面上显示还能够输入多少字符。

开发过程中翻了两个形式错误:

1、仅仅使用onkeyup事件

2、使用zepto绑定事件的时候,经验主义错误

第三方输入法在输入拼音的时候,并没有把输入的汉字直接写在输入框内,而是在输入法上方暂存,只有选择了字后才填到textarea输入框中,这时候是兼听不到键盘事件的,所以完全依赖keyup事件,是没办法准确获取所输入的字符数的,所以只能监听其他事件,HTML5新增事件oninput完美解决这一bug,但是当我检查其兼容性时,http://caniuse.com/#search=oninput 给出的兼容性列表是:

ios版本最低只兼容到9.3, Android 4.4就有点悲催了。

但实际检测,使用的是iPhone5s,版本为7.0的也能够正确监听到input事件。

第二个错误更是经验主义错误,

  $(function () {
      var wordCount = 0,
        totalCount = 20,
        remaining = totalCount - wordCount;
        $(‘#overage‘).text(remaining);
      $(‘textarea‘).on(‘input, focus, keyup‘, function (ev) {
        wordCount = $.trim($(this).val()).length;
        remaining = totalCount - wordCount;
        if (remaining <= 0) {
          $(this).val($(this).val().slice(0, totalCount));
          $(‘#overage‘).text(0);
        } else {
          $(‘#overage‘).text(remaining);
        }
        ev.stopPropagation();
      });
    })

  估计很多人会和我一样,看不出来错误在哪里?

事实上,zepto包括jquery使用on绑定多个事件,中间是以空格分开的,而不是逗号。

  $(function () {
      var wordCount = 0,
        totalCount = 20,
        remaining = totalCount - wordCount;
        $(‘#overage‘).text(remaining);
      $(‘textarea‘).on(‘input focus keyup‘, function (ev) {
        wordCount = $.trim($(this).val()).length;
        remaining = totalCount - wordCount;
        if (remaining <= 0) {
          $(this).val($(this).val().slice(0, totalCount));
          $(‘#overage‘).text(0);
        } else {
          $(‘#overage‘).text(remaining);
        }
        ev.stopPropagation();
      });
    })

  

时间: 2024-11-11 04:04:04

实时监听移动端输入框的变化的相关文章

实时监听组件中路由的变化

实时监听组件中路由的变化,通过watch来进行监听,当路由发生变化时,重新赋值,重新执行从后台获取数据的操作 watch: { '$route' (to, from) { this.listQuery.keywords=this.$route.query.keywords this.searchByKeywords() } }, methods: { searchByKeywords() { this.$store.dispatch('updateLoading', true) fetchSea

js实时监听input中值的变化

$(function(){ $('#inputid').bind('input propertychange', function() { // input 中的值 var params = $(this).val(); }); }) 类似于实现‘还能输入xxx个字符’的效果. oninput, onpropertychange, onchange的用法: 1.onchange 触发事件必须满足两个条件: a)当前对象属性改变,并且是由键盘或鼠标事件激发的(脚本触发无效) b)当前对象失去焦点(

关于实时监听输入框的值变化

实时监听文本框值变化是非常常见的功能,通常最简单的办法就是用keyup,keydown来实现,但是这种方法有两个问题,一个是当直接复制粘贴的时候没法监听到事件,另外一个问题是在移动端,使用删除键删除输入时候也无法监听到! 解决办法: 1.使用onchange事件 onchange事件是文本框内容改变并失去焦点的时候才触发. 2.比较完美的解决办法:oninput和onproper oninput 是 HTML5 的标准事件,对于检测 textarea, input:text, input:pas

javascript --- 实时监听输入框值的变化

实时监听文本框值变化是非常常见的功能,通常最简单的办法就是用keyup,keydown来实现,但是这种方法有两个问题,一个是当直接复制粘贴的时候没法监听到事件,另外一个问题是在移动端,使用删除键删除输入时候也无法监听到! 解决办法: 1.使用onchange事件 onchange事件是文本框内容改变并失去焦点的时候才触发. 2.比较完美的解决办法:oninput和onproper oninput 是 HTML5 的标准事件,对于检测 textarea, input:text, input:pas

移动端用js与jquery实时监听输入框值的改动

背景: 在一次移动端H5开发中,需要监听输入框值的实时变动. onchange事件肯定抛弃,因为只能失去焦点才触发. 而keyPress在Android可以触发,iOS不可以. 又不想用Android和iOS都可以触发的keyDown和keyUp. 于是,百度出了新东西:oninput![需要配合propertychange,兼容 IE9 以下版本] 用法: JS: if(isIE) { document.getElementById("input").onpropertychange

js/jquery 实时监听输入框值变化的完美方案:oninput &amp; onpropertychange

本文转载于 http://blog.163.com/lgh_2002/blog/static/44017526201341511112874/ Jquery绑定事件(bind和live的区别) js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange 2013-05-15 11:01:12|  分类: jquery/javascrip |

oninput和onpropertychange实时监听输入框值的变化

传统监听输入框的做法就是使用keyup.keydown.keypress,或者change事件来实现,但keyup.keydown.keypress事件是只要完成击键事件后就触发,不考虑输入框的值是否变化,也监听不了使用鼠标右键[剪贴]和[粘贴]这些操作,更监听不了使用JS动态改变值的变化.而change事件必须是焦点离开输入框后才触发,并不能实时监听.所以这几个事件来监听输入框值变化并不完美.ie浏览器(ie6-8)可以直接使用onpropertychange事件来实时监听(包括JS动态改变值

js/jquery 实时监听输入框值变化的完美方案

js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange 解释:先说jquery, 使用 jQuery 库的话,只需要同时绑定 oninput 和 onpropertychange 两个事件就可以了,示例代码:$('#username').bind('input propertychange', function() { $('#content').html($(this).val().length + ' characters');});

jquery实时监听输入框值变化

在做web开发时候很多时候都需要即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感.而采用onchange时间又往往是在输入框失去焦点(onblur)时候触发,有时候并不能满足条件. 首先看一下dom中元素事件: onpropertychange: IE下,当一个HTML元素的属性改变的时候,都能通过 onpropertychange来即时捕获.onchange在属性值改变时还必须使得当前元素失去焦点(onblur)才可以激活该事件. 在用js脚本改动该元素值时候亦能触发o