以下是我这边的方案:
一直按住ctrl+V不松,移动鼠标点击别的文本框,文本框的keyup事件不执行,但每次鼠标移动到别的文本框时都会失去焦点,所以keyup处理的东西可以在onblur时再处理一次
$("[checktype*='num']").live("keyup blur", function(event) {
//禁用左右移动健的keyup事件
if(event.keyCode!=37&&event.keyCode!=39){
var val = $(this).val();
val = val.replace(/[^\d]/g,'');
$(this).val(val);
}
});
以下是转自别处的,一些别的处理方案
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
转自http://www.w3cfuns.com/article-5594407-1-1.html
需求:
做一个自动完成功能,用户再输入框里输入文本后,要能自动发ajax请求到后台去请求数据.
我之前用的是keyup事件,本来我是想用keypress(字符键)事件的,这样,那些杂七杂八的按键这个事件就捕获不到了,也不用触发,感
觉更有效率.
可惜呀,在keypress的时候字符还没有添加到文本框里呢,我就捕获不到用户输入的字符了,也不能把完整的数据传给后台.
所以,我还是用了keyup事件.
可是这个时候我们老大问我:"那如果我不是手动输入,而是粘贴文本进输入框,你的这个事件会触发吗?"
我想,那应该能吧,我就试了下,步骤如下:
1.我点击输入框,然后去复制"作业本",2.粘贴到输入框里,keyup是能捕获的.
但是....
为虾米总是还有个但是呢?
如果我直接1.不点击输入框,直接复制,再右键粘贴文本到输入框里,这个时候悲剧了,keyup捕获不了我的粘贴动作了..
在试了$("body".on("keyup keydown focus mouseup",func()});里面的几个事件后,我发现单独绑定这里面的某一个事件的时候
不能正常捕获用户直接粘贴文本内容到输入框里,当我把这几个事件全绑定上的时候发现是可以触发请求的,可是却会感觉非常非
常慢,感觉有二十秒吧,而单独用keyup绑定的时候结果一二秒就出来了.
在上面的请求里,我一堆乱炖,没有检测出来到底是哪个是能捕获到粘贴到文本框的事件,但是肯定不是keydown,我以为是
mouseup,因为去掉了它后请求捕获不到了.我把mouseup弄回来,再在一堆绑定事件里去掉focus,结果事件还是捕获不到粘贴.
坑爹呀.
难道一定要同时绑定focus,mouseup才能触发请求?
后来,星钻(w3c滴朋友)跟我说用onpropertychange看看行不?我说这个只在ie下有用,然后星钻又推荐说oninput在firefox下是可以
的,我在ff,chrome,ie9下测了,这个事件能捕获到我的粘贴...可惜啊,ie8你都不支持.
后来我在查找chrome的方法的时候发现paste事件也是能捕获用户的粘贴的,chrome,ff,ie8也都兼容.
可惜的是,paste有一个问题,paste事件执行的时候你刚刚input输入的字符还没有添加进输入框里呢,所以这个时候你想获取这个input最新的值是获不到的.
**********************************************************************************************************************************************************************************