textarea id=txt/textareascriptfunction fnPageUp(){console.log(pageup);return false; }function fnArrowUp(){console.log(arrowup);}function fnEnter(){console.log(enter);return false;}var obj = {PageUp:fnPageUp, ArrowUp:fnArrowUp, Enter: fnEnter};var km = new Keymap(obj);var txt = document.getElementById(txt);km.install(txt);/script文本事件:
文本类事件 , 只有一个textinput , 当在可编辑区域中输入字符时 , 会触发此事件;
var txt = document.getElementById(txt);txt.addEventListener(textinput, function(event){console.log(event);// TextEvent});但只有IE支持 , 其他所有浏览器都不支持;但却存在一个不标准的textInput事件 , 注意Input的第一个字母是大写;
txt.addEventListener(textInput, function(event){console.log(event);// TextEvent});但除了Webkit浏览器支持 , IE和Firefox不支持textInput事件;
该事件是对keypress的补充 , 用意是在将文本显示给用户之前拦截文本 , 也就是在文本插入文本框之前会触发textinput事件;
但是两者有些不同:
任何可以获得焦点的元素都可以触发keypress事件 , 但只有可编辑元素才能触发textinput事件;
textinput事件只会在用户按下能够输入实际字符的键时才会被触发 , 而keypress事件则在按下那些能够影响文本显示的键时也会触发(如退格键);
textinput事件event对象还包含一个data属性 , 其值就是输入的字符;
EventUtil.addHandler(txtInput, textinput, function(event){event = EventUtil.getEvent(event);console.log(event.data);});另外 , textinput是先于keyup、后于keypress触发 , 如果在keypress事件中阻止了默认行为 , 那么textinput事件就有可能不会被触发了 , 如:
txt.addEventListener(textInput, function(event){console.log(event.type);});txt.addEventListener(textinput, function(event){console.log(event.type);});txt.addEventListener(keypress, function(event){console.log(event.type);event.preventDefault();});textinput事件不是键盘的特定事件 , 无论通过键盘、剪切和粘贴、拖放等方式 , 每当发生文本输入时就会触发它;
event对象的inputMethod属性是一组常量值 , 表示文本输入的方式(也就是所谓的输入源) , 如:0表示浏览器不确定是怎么输入的、1表示是使用键盘输入、2表示是粘贴进来的、3表示是拖放进来的、4表示是使用IME输入的、5表示是通过在表单中选择某一项输入的、6表示是通过手写输入的、7表示是通过语音输入的、8表示是通过几种方法组合输入的、9表示是通过脚本输入的;
通过这个属性可以确定文本是如何输入到控件中的 , 但只有IE支持inputMethod属性;
对于键盘输入 , data属性通常只保存单个字符 , 但其他输入源通常可能包含多个字符;对于keypress事件来说 , 一个keypress事件表示输入的单个字符 , 其使用keyCode或charCoode属性来保存的 , 返回的是对应的Unicode编码 , 因此需要使用String.fromCharCode()方法进行转换 , 如:
var txt = document.getElementById(txt);txt.addEventListener(textInput, function(event){console.log(textInput: + event.data);});txt.addEventListener(keypress, function(event){console.log(keypress: + String.fromCharCode(event.charCode));});可以通过取消textinput、textInput和keypress事件来阻止字符输入 , 这意味着可以使用这些事件来过滤输入 , 如:过滤用户输入 , 保存为InputFilter.js
// HTML代码示例// 邮政编码:input id=zip type=text data-allowed-chars=0123456789//data-messageid=zipwarn /// span id=zipwarn style=color:red; visibility:hidden只支持数字/spanfunction inputfilter(){console.log(filter);// 查找所有input元素var inputelts = document.getElementsByTagName(input);for(var i=0, len = inputelts.length; ilen; i++){var elt = inputelts[i];// 跳过不是文本域或没有data-allowed-chars属性的元素if(elt.type != text || !elt.getAttribute(data-allowed-chars))continue;// 在input元素上注册事件处理程序if(elt.addEventListener){elt.addEventListener(keypress, filter, false);elt.addEventListener(textInput, filter, false);elt.addEventListener(textinput, filter, false);}else{elt.attachEvent(onkeypress, filter);}}// 处理程序function filter(event){var e = event || window.event;var target = e.target || e.srcElement;var text = null;// 输入的文本// 获取输入的字符或文本if(e.type === textinput || e.type===textInput )text = e.data;else{var code = e.charCode || e.keyCode;// 如果按下的是功能键 , 不要过滤if(code32 ||// ASCII控制字符e.charCode == 0 || // Firefox的功能键e.ctrKey || e.altKey)// 辅助键return;text = String.fromCharCode(code);}var allowed = target.getAttribute(data-allowed-chars); // 合法字符var messageid = target.getAttribute(data-messageid);// 信息元素idif(messageid)var messageElement = document.getElementById(messageid);for(var i=0, len=text.length; ilen; i++){var c = text.charAt(i);if(allowed.indexOf(c) == -1){if(messageElement)messageElement.style.visibility = visible;if(e.preventDefault)e.preventDefault();if(e.returnValue)e.returnValue = https://www.yebaike.net/info/false;return false;}}if(messageElement)messageElement.style.visibility = hidden;}};应用:
- 探云空调是什么牌子
- 美的空调c5是什么意思
- 显卡独显是什么样的 显卡独显是什么意思
- 空调内机风扇不转是什么原因
- 电视在播放中突然黑屏是什么原因
- menu键是什么意思 MENU是什么功能键
- ffu是什么意思 /FF是什么意思
- 962464用九键打出来是什么意思
- 莱万是什么级别 莱万是哪国的
- 京东闪付用的是什么钱