2016-03-04 79 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