2010-05-14 38 views
7

我試圖以編程方式激發關鍵事件在文本框中左移,但沒有任何運氣。以編程方式在文本輸入中按「左」鍵

輸入元素具有焦點並且光標位於末尾。我試圖讓光標向左移動一步 - 在字母「F」*之前,通過以相應的擊鍵←或→來觸發輸入框處的鍵盤事件(keydown/keyup/keypress),以編程方式進行操作。

ABCDEF |

這裏是到目前爲止的代碼:

HTML

<input id="a" type="text" /> 

的Javascript

var keyEvent = document.createEvent("KeyboardEvent"); 

var keyLocation = '0x00'; 
var keyIdentifier = "Left"; 

keyEvent.initKeyboardEvent("keypress", 
         true, 
         true, 
         window, 
         keyIdentifier, 
         keyLocation, 
         false); 

$("a").dispatchEvent(keyEvent); 

保存上的jsfiddle一個快速演示,如果你想看到整個代碼 - http://jsfiddle.net/Vsafv/

我對製作不感興趣這個跨瀏覽器(只需讓它在Chrome中工作)。謝謝你的幫助。

回答

9
e = jQuery.Event("keydown"); // define this once in global scope 
e.which = 37; // Some key value 
$("input").trigger(e); 

哪裏「input」是你的文字區域

37 - 左
38 - 高達
39 - 右
40 - 向下

所以,當您記錄 「事件」 您記錄按下鍵的值。
我敢肯定你已經想出了一個辦法做到這一點,但爲了以防萬一,這裏有一個如何我會解決它的想法:

var keysPressed = new Array(); // somewhere in the global scope 
$("input").keydown(function (e) { 
    keysPressed.push(e.which); //adding values to the end of array 
}); 

希望這有助於

+0

感謝解決方案@Raine。我用你的代碼嘗試了一個基本的例子 - http://jsfiddle.net/sZL3H/,但沒有任何運氣。 – Anurag 2010-05-31 17:15:50

8

而對於那些不看的jQuery作爲解決一切:)

http://blog.josh420.com/archives/2007/10/setting-cursor-position-in-a-textbox-or-textarea-with-javascript.aspx

function setCaretPosition(elemId, caretPos) { 
    var elem = document.getElementById(elemId); 

    if(elem != null) { 
     if(elem.createTextRange) { 
      var range = elem.createTextRange(); 
      range.move('character', caretPos); 
      range.select(); 
     } 
     else { 
      if(elem.selectionStart) { 
       elem.focus(); 
       elem.setSelectionRange(caretPos, caretPos); 
      } 
      else 
       elem.focus(); 
     } 
    } 
} 
+0

通緝-1,因爲沒有足夠的jQuery:P,但認真 - 謝謝你的解決方案。我可以移動插入符號,但有興趣知道是否可以通過觸發鍵盤事件(如「keydown/keyup/keypress」)來完成。原因在於我正在編寫一個腳本來重放用戶操作,如果我只能記錄所有事件對象並在稍後分派它們,它就變得微不足道了。這比在上面的情況下試圖將每個事件映射到合適的動作/功能要簡單得多,其中←或→鍵映射到移動插入符的東西。 – Anurag 2010-05-14 16:33:20

+0

-1不回答如何將事件發送到文本輸入的問題。該示例只是將光標定位到某個特定的位置,而不是如何正確地創建事件以及如何使瀏覽器處理它。 – 2010-05-31 07:18:32

+0

@Aaron,當我回答這個問題時,可以解釋爲'如何向左移動光標',這是一個完全有效的答案。 – 2010-05-31 15:18:09

1

至於我可以看到,你可以這樣做:

var pos = document.getElementById("a").length; 
document.getElementById("a").setSelectionRange(pos-1, pos-1); 
相關問題