2011-08-03 24 views
13

Nói rằng tôi có điều này:Làm thế nào để kích hoạt backspace trên một textfield?

<textarea id="myarea">Hello</textarea> 

Làm thế nào tôi sẽ kích hoạt backspace trên textarea mà có thể sử dụng kích hoạt() và mã chủ chốt. Mã cho phím lùi là 8. Và tôi không tìm kiếm này:

$('#myarea').val($("myarea").val().slice(0,-1)); 

tôi cần phải mô phỏng ai đó thực sự nhấn phím 'xóa lùi' trên bàn phím của họ. Cảm ơn

+0

Bạn có nghĩa là khi anh ta cố gắng xóa nó hoặc khi anh ta nhấp vào nút đặt lại hoặc nội dung nào đó xóa văn bản theo cách backspace? – Warface

Trả lời

8

Bạn có thể tạo một sự kiện KeyDown:

var e = jQuery.Event("keydown", { keyCode: 20 }); 

Sau đó kích hoạt nó trong textarea của bạn:

$("#myarea").trigger(e); 

Cập nhật:

Sau khi thực hiện một số nghiên cứu thêm và thử nghiệm, tôi nhận ra rằng giải pháp này không NOT mô phỏng một tự nhiên nhấn sự kiện trên phần tử HTML. Phương thức này chỉ kích hoạt sự kiện keydown, nó không nhân rộng người dùng đi vào phần tử và nhấn phím đó.

Để mô phỏng người dùng đi vào textbox đó và nhấn phím đó, bạn sẽ phải tạo một dispatch event

sự kiện Công văn cũng không được hỗ trợ trên toàn cầu. Đặt cược tốt nhất của bạn sẽ là kích hoạt sự kiện keydown và sau đó cập nhật vùng văn bản như dự định.

+0

những gì đang làm sai ở đây http://jsfiddle.net/qtPcF/34/? – odle

+0

Bạn không làm gì sai. Đọc bài đăng cập nhật để biết thêm thông tin – rkw

6

Tôi đã tìm thấy điều này:

http://forum.jquery.com/topic/simulating-keypress-events (câu trả lời số 2).

Something như thế này nên làm việc, hoặc ít nhất là cung cấp cho bạn một ý tưởng:

<div id="hola"></div> 

$(function(){ 
    var press = jQuery.Event("keyup"); 
    press.ctrlKey = false; 
    press.which = 40; 

    $('#hola').keyup(function(e){ 
     alert(e.which); 
    }) 
    .trigger(press); // Trigger the event 
}); 

Demo: http://jsfiddle.net/qtPcF/1/

0

Bạn nên không được buộc các sự kiện quan trọng trong việc js. Thay vào đó, hãy thử mô phỏng xóa ký tự.

const start = textarea.selectionStart - 1; 
const value = textarea.value; 
const newValue = value.substr(0, start) + a.substr(start); 
textarea.value = newValue; 

Hoặc nếu bạn chỉ muốn sự kiện, thay vào đó hãy gọi trực tiếp cho người xử lý thay vì buộc sự kiện. Đây là quá hacky.