2016-03-04 78 views
0

是否可以更改键盘的输入值?Javascript输入更改

例如:

您按键盘上的键ab将被输入到输入元素,而不是a

您键入abc但在输入元素将是def

我试图捕获​​事件,然后用CustomEvent/Event发起keydown事件。但它不适合我。事件捕获很好,但是当我使用新的charCodekeyCode创建其他​​事件时,“新”字符将不会输入到输入中。

因此,是否有可能将某些东西写入到插入符号位置的输入元素中,而不使用value属性或任何其他处理或修改输入内容的方法。所以只需插入或粘贴一个字母。

JS

function keydown(e) { 
    e.preventDefault(); 

    var event = new Event('keydown'); 
    event.charCode = 65; 
    element.dispatchEvent(event); 
} 

HTML

也许,这是不可能用这种方法,但我没有任何其他的想法至今...

+0

@Gothdo:他们什么时候停止允许吗? – dandavis

+0

@Gothdo好的,但是还有其他的可能性吗?例如:将文本粘贴到插入符号或选定的区域? – gabe

+0

[在JavaScript中触发键盘事件]的可能重复(http://stackoverflow.com/questions/961532/firing-a-keyboard-event-in-javascript) –

回答

1

我发现另一种方式与document.execCommand()做到这一点:

document.querySelector("input") 
 
.addEventListener("keypress", function (event) { 
 
    event.preventDefault(); 
 
    document.execCommand('insertText', false, 'b'); 
 
})
<input>

0

使用下面的代码在键入内容时获取光标位置。一旦你获得光标位置,你可以替换字符并将文本设置回文本框。让我知道你想让代码把光标放回它替换字符的位置。

<script type="text/javascript"> 
function getLocation(ctrl) 
{ 
    var position = 0; 

    if (document.selection) { 

     ctrl.focus(); 
     var sel = document.selection.createRange(); 

     sel.moveStart ('character', -ctrl.value.length); 

     position = Sel.text.length; 
    } 
    else if (ctrl.selectionStart || ctrl.selectionStart == '0') 
     position = ctrl.selectionStart; 

    alert (position); 
} 

</script> 
<input type="text" onkeyup="getLocation(this);"></input> 
+0

谢谢,我知道这个解决方案,但如果我替换字符,我必须改变整个值 – gabe