2013-05-02 35 views
7

Tôi có một trường "tự sửa" khi bạn nhập. Chúng tôi có một số mã được viết để ngăn chức năng này khi các phím mũi tên được nhấn:Làm cách nào để kích hoạt sự kiện khóa và chuyển khóa?

handleKeyUp: function(e) { 
    var arrowKeys = _.range(37, 41), 
     key = e.which; 

    // allow user to move cursor by keyboard 
    if ($.inArray(key, arrowKeys) < 0) { 
     this.removeInvalidCharacters(); 
    } 
}, 

Chúng tôi muốn viết một bài kiểm tra đơn vị cho việc này; tuy nhiên, chúng tôi không thể tìm ra cách để vượt qua e.which qua $input.trigger('keyup'). Tôi biết thông số kích hoạt thứ hai cho phép chúng tôi gửi "tùy chọn bổ sung"; tuy nhiên, điều đó chỉ chuyển giá trị nhiều giá trị hơn cho hàm handleKeyUp. Ý tưởng?

Trả lời

14

Hãy thử điều này -

var e = $.Event("keyup"); 
e.which = 37; 
$input.trigger(e); 

http://api.jquery.com/category/events/event-object/

Tính đến jQuery 1.6, bạn cũng có thể vượt qua một đối tượng để jQuery.Event() và thuộc tính của nó sẽ được đặt trên sự kiện mới được tạo vật.

// Create a new jQuery.Event object with specified event properties. 
var e = jQuery.Event("keydown", { keyCode: 64 }); 

// trigger an artificial keydown event with keyCode 64 
jQuery("body").trigger(e); 
+1

Câu trả lời này rất tuyệt, tôi không biết bạn có thể làm điều đó. – jraede

+0

nó hoạt động tốt cho tôi .. thnx –

0

tôi sẽ cho phép handleKeyUp để chấp nhận hoặc là đối tượng sự kiện hoặc một số nguyên. Chỉ cần thêm một dòng phụ để xác định những gì key là, tùy thuộc vào loại e. Sau đó, kiểm tra đơn vị của bạn có thể chạy handleKeyUp(40). Đây là giả định, tất nhiên, mục đích của bài kiểm tra đơn vị của bạn không phải là để kiểm tra các trình xử lý keyup trên các đầu vào.