2010-05-14 19 views
7

Tôi đang cố gắng để lập trình kích hoạt một sự kiện quan trọng để chuyển sang trái trong hộp văn bản, nhưng không có bất kỳ sự may mắn nào.Nhấn phím "Trái" theo cách lập trình trong kiểu nhập văn bản

Phần tử đầu vào có tiêu điểm và con trỏ ở cuối. Tôi đang cố gắng di chuyển con trỏ sang trái một bước - trước ký tự "F" * theo lập trình bằng cách kích hoạt một sự kiện Bàn phím (keydown/keyup/keypress) với phím tắt tương ứng ← hoặc → được nhắm mục tiêu ở hộp nhập.

ABCDEF |

Dưới đây là đoạn mã cho đến nay:

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); 

lưu một bản demo nhanh chóng trên jsfiddle nếu bạn muốn xem toàn bộ mã - http://jsfiddle.net/Vsafv/

Tôi không muốn làm trình duyệt chéo này (chỉ làm cho nó hoạt động trong Chrome). Cảm ơn vì bất kì sự giúp đỡ.

Trả lời

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

nơi "đầu vào" là văn bản của bạn

37 - trái
38 - lên
39 - ngay
40 - xuống

Vì vậy, khi bạn ghi lại "sự kiện" của bạn, bạn ghi lại các giá trị cho các phím bấm.
tôi chắc chắn rằng bạn đã tìm ra một cách để làm điều này, nhưng chỉ trong trường hợp, đây là một ý tưởng về làm thế nào tôi sẽ giải quyết nó:

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

Hope this helps

+0

Cảm ơn vì giải pháp @Raine. Tôi đã thử một ví dụ cơ bản với mã của bạn - http://jsfiddle.net/sZL3H/, nhưng không có bất kỳ may mắn nào. – Anurag

8

Và đối với những người không xem jQuery như giải pháp cho tất cả mọi thứ :)

Từ 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

Muốn -1 vì không đủ jQuery: P, nhưng nghiêm túc - cảm ơn giải pháp. Tôi có thể di chuyển các dấu sót xung quanh, nhưng tôi muốn biết nếu nó có thể được thực hiện bằng cách bắn một sự kiện bàn phím như "keydown/keyup/keypress". Lý do là tôi đang viết một kịch bản để phát lại các hành động của người dùng và nó trở nên tầm thường nếu tôi chỉ có thể ghi lại tất cả các đối tượng sự kiện và gửi chúng vào một thời điểm sau đó. Nó đơn giản hơn nhiều so với cố gắng ánh xạ từng sự kiện đến một hành động/chức năng thích hợp trong khi phát lại như trong trường hợp trên, trong đó các phím ← hoặc → ánh xạ tới thứ gì đó di chuyển dấu mũ. – Anurag

+0

-1 Không trả lời câu hỏi về cách gửi các sự kiện tới kiểu nhập văn bản. Ví dụ này chỉ hoạt động để định vị con trỏ tới một số vị trí cụ thể nhưng không phải cách tạo đúng sự kiện và cách làm cho trình duyệt xử lý nó. –

+0

@Aaron, khi tôi trả lời câu hỏi có thể được hiểu là có nghĩa là 'cách di chuyển con trỏ sang trái' và đây là câu trả lời hoàn toàn hợp lệ cho câu hỏi đó. –

1

Theo như tôi có thể nhìn thấy , bạn có thể làm:

var pos = document.getElementById("a").length; 
document.getElementById("a").setSelectionRange(pos-1, pos-1); 
Các vấn đề liên quan