中文输入法不触发onkeyup事件的解决办法

参考:

http://www.cnblogs.com/xcsn/p/3413074.html

http://www.soso.io/article/21182.html

最近做一个输入框只能输入有两位小数点的小数,当时监听的是keyup事件,当输入法改为中文,然后按enter键,这样还是能输入其他的字符(火狐没有这个问题,谷歌里有这个问题),后来百度下才知道原因,具体参考以上两个网址。

修改前写法:

     <input type="text" name="inputorp_i" id="inputorp_i" autocomplete="off" onkeyup="clearNoNum(this)"/>
    <span id="inputorp_s"></span>

    <script>
//只能输入数字和小数点
        function clearNoNum(obj)

        {

        //先把非数字的都替换掉,除了数字和.
        obj.value = obj.value.replace(/[^\d.]/g,"");
        //必须保证第一个为数字而不是.
        obj.value = obj.value.replace(/^\./g,"");
        //保证只有出现一个.而没有多个.
        obj.value = obj.value.replace(/\.{2,}/g,".");
        //保证.只出现一次,而不能出现两次以上
        obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");

        obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/, ‘$1$2.$3‘); //只能输入两个小数
        }

    </script>

修改后的写法:

    <input type="text" name="inputorp_i" id="inputorp_i" autocomplete="off"/>
    <span id="inputorp_s"></span>

    <script>
         //先判断浏览器是不是万恶的IE,没办法,写的东西也有IE使用者
        var bind_name = ‘input‘;
       if (navigator.userAgent.indexOf("MSIE") != -1){
          bind_name = ‘propertychange‘;
        }
        $(‘#inputorp_i‘).bind(bind_name, function(){
          clearNoNum(this);
        }) 

        //只能输入数字和小数点
        function clearNoNum(obj)

        {

        //先把非数字的都替换掉,除了数字和.
        obj.value = obj.value.replace(/[^\d.]/g,"");
        //必须保证第一个为数字而不是.
        obj.value = obj.value.replace(/^\./g,"");
        //保证只有出现一个.而没有多个.
        obj.value = obj.value.replace(/\.{2,}/g,".");
        //保证.只出现一次,而不能出现两次以上
        obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");

        obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/, ‘$1$2.$3‘); //只能输入两个小数
        }

    </script>
时间: 2024-12-12 05:59:40

中文输入法不触发onkeyup事件的解决办法的相关文章

解决js中文输入法无法触发onkeyup事件问题(转)

当监听一个input的keyup的事件的时候,英文输入法的情况下可以实时的通过keyup事件检测到文本框value的变化,但是当输入法变成中文后,input的keyup事件就不会被正常触发. oninput是firefox下面可用,而onpropertychange则是ie下可用.两个方法有着一些区别. oninput只能检测到value这个属性的变化,而onpropertychange则可以检测到包含value的所有属性的变化.于是开始改成这个样子.  使用oninput以及onpropert

苹果手机输入中文不会触发onkeyup事件

今天同事的项目有这个问题,用我的安卓手机输入中文是ok的,但是苹果手机就不行 使用keyup事件检测文本框内容:  $('#keyup_i').bind('keyup', function(){         $('#keyup_s').text($(this).val());  } 本来是上面这种处理方式,现在改成下面这样就ok了 使用oninput以及onpropertychange事件检测文本框内容:  //先判断浏览器是不是万恶的IE,没办法,写的东西也有IE使用者       var

FileSystemWatcher触发多次Change事件的解决办法

(转) 最近要用到FileSystemWatcher来监控某个目录中的文件是否发生改变,如果改变就执行相应的操作(具体操作如:打开文档,添加一行,保存).但在开发过程中,发现FileSystemWatcher在文件创建或修改后,会触发多个Created或Changed事件,具体原因就是处理文件的过程中执行了多次文件系统操作,触发了多次事件.具体可以参看微软的关于FileSystemWatcher这方面的解释:Troubleshooting FileSystemWatcher Components

双击事件失效解决办法

某些时候,双击事件会失效,模拟办法解决双击失效后,而同时我又不想在该元素上触发两次单击事件,解决办法如下: var dbclickTime={ prev:0, next:0//模拟触发双击};var clickConflict={//解决单击事件和双击事件的冲突 _timeout:null, set:function (fn) { this.clear(); this._timeout=window.setTimeout(fn,400); }, clear:function () { if(th

[Phonegap+Sencha Touch] 移动开发16 安卓webview中,input输入框不触发backspace回退键事件的解决办法

可以用安卓手机浏览器打开 http://javascript.info/tutorial/keyboard-events#test-stand-test-stand 测试看看. Android 4.2自带浏览器和webview的测试结果(其他版本没试过,估计4.X都是这样): 当input有内容的时候,点击软键盘回退键(keyCode=8),是有keyEvents事件(keyup keydown)触发的:当input是空的时候,再点击,就不触发keyEvents了. Chrome浏览器测试结果:

form的submit()方法不能触发onsubmit事件的解决方法,兼容各版本浏览器。

在处理表单提交的时候遇到一个问题,通常用<input type="submit" value="提交" />按钮来提交form,再监听form的onsubmit事件就能在前端处理表单验证的事情. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document<

JQuery如何实现双击事件时不触发单击事件,解决鼠标单双击冲突问题

在jQuery的事件绑定中,如果元素同时绑定了单击事件(click)和双击事件(dblclick),那么执行单击事件(click)时,不会触发双击事件(dblclick), 执行双击事件(dblclick)时却会触发两次单击事件(click). 但有时候我们希望在执行双击事件的时候不去出发单击事件,那究竟该如何实现呢? 少bb 上代码 : <!DOCTYPE html> <html lang="en"> <head> <meta charset

vb.net WPF webbrowser window.close 关闭后不触发 WindowClosing 事件 WNDPROC解决方式

 #Region "WPF 当浏览器窗体关闭时触发 Quit事件 " #If OnSourceInitialized Then Protected Overrides Sub OnSourceInitialized(e As EventArgs) 'onload 等句柄创建后引用WSInitialized(Me, e) WSInitialized(Me, e) MyBase.OnSourceInitialized(e) End Sub #Else Private Sub LyWeb

JS事件冒泡解决办法

<div id="div1"> <div id="div2"> <input type="button" value="按钮"/> </div> </div> $(function(){ $("div1").click(function(){ alert("DIV1"); }); $("div2").clic