max*_*son 24 javascript jquery events keypress keydown
在输入框或contenteditable = true div中,如何修改字母"a"的按键以返回字母"b"的按键?即,每次在div中键入字母"a"时,输出实际上是字母"b".
我并不关心在IE中运行的解决方案 - 只适用于Safari,Chrome和FF.
在Chrome中,我可以看到按键事件具有属性"charCode","keyCode"和"which",所有这些属性都被分配了按键事件编号.如果我在一个按键触发一个事件,我可以修改这些值,但我无法弄清楚如何返回,使得被输入的实际密钥是不同的.例如:
$(window).keypress(function(e){ //$(window) is a jQuery object
e.charCode = 102;
e.which = 102;
e.keyCode = 102;
console.log(e);
return e;
});
Run Code Online (Sandbox Code Playgroud)
我还可以看到,除了charCode,和keyCode之外,还有一个"originalEvent"属性,而这个属性又具有这些属性.但是,我无法修改那些(我试过像e.originalEvent.charCode = 102这样的东西).
Tim*_*own 29
您无法更改与键事件关联的字符或键,也无法完全模拟键事件.但是,您可以自己处理按键并在当前插入点/插入符号处手动插入所需的字符.我已经在Stack Overflow上的许多地方提供了代码来执行此操作.对于contenteditable元素:
这是一个jsFiddle示例:http://www.jsfiddle.net/Ukkmu/4/
输入:
跨浏览器jsFiddle示例:http://www.jsfiddle.net/EXH2k/6/
IE> = 9和非IE jsFiddle示例:http://www.jsfiddle.net/EXH2k/7/
小智 6
我的解决方案示例(input[type=text]将字符更改','为'.'):
element.addEventListener('keydown', function (event) {
if(event.key === ','){
setTimeout(function() {
event.target.value += '.';
}, 4);
event.preventDefault();
};
Run Code Online (Sandbox Code Playgroud)
这里一个简单的例子,以取代,以.用香草的JavaScript
// change ',' to '.'
document.getElementById('only_float').addEventListener('keypress', function(e){
if (e.key === ','){
// get old value
var start = e.target.selectionStart;
var end = e.target.selectionEnd;
var oldValue = e.target.value;
// replace point and change input value
var newValue = oldValue.slice(0, start) + '.' + oldValue.slice(end)
e.target.value = newValue;
// replace cursor
e.target.selectionStart = e.target.selectionEnd = start + 1;
e.preventDefault();
}
})Run Code Online (Sandbox Code Playgroud)
<input type="text" id="only_float" />Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39614 次 |
| 最近记录: |