2013-08-09 32 views
8

Làm việc trên điều khiển HTML hoạt động nhiều hơn/ít hơn như bảng tính - với ma trận của các ô dữ liệu có thể chỉnh sửa. Khi nói đến các tế bào có nguồn gốc từ CHỌN Tôi đang gặp sự cố khi nhận được hành vi đúng khi loại ô đó được chọn để chỉnh sửa:Ghi đè hành vi SELECT của phím Enter

Nếu tôi hiển thị Chọn bằng định dạng mặc định (size = 0) thì người dùng bị out-of-nơi hành vi chế biến Nhập-key Chọn nhân:

  • 1st Nhập => kích hoạt chỉnh sửa trên các tế bào (cho thấy chọn điều khiển)
  • 2 Nhập => mở rộng Chọn để hiển thị Tùy chọn
  • người dùng lựa chọn sử dụng hết/dn các phím
  • 3rd Enter => đóng danh sách. (Sự cố: lần nhập này bị ẩn khỏi trình xử lý sự kiện "keydown")
  • 4th Enter => required để kích hoạt trình xử lý sự kiện để hủy kích hoạt chỉnh sửa ô.

Mặt khác, nếu lựa chọn được hiển thị dưới dạng hộp danh sách (ví dụ: size = 3, ví dụ) hành vi phím Enter chính xác là những gì tôi đang tìm kiếm (có nghĩa là # 2 và # 3 trên danh sách trên không còn cần thiết nữa), nhưng vì danh sách hiện được hiển thị bên trong để điều khiển (chứ không phải là cửa sổ bật lên), nó sẽ thổi kích thước ô/hàng. Vì vậy, có cách nào để "móc" vào sự kiện Enter-key thứ 3 ở trên, hoặc một số cách tương đối thẳng về phía trước khác để thay đổi hành vi của Chọn khi nói đến việc xử lý phím Enter không? Không, có phải là một cách khác không?

Chú ý: chúng tôi không sử dụng bất kỳ thư viện của bên thứ 3 (đọc:. JQuery, et al)

EDIT: đây là lắng nghe sự kiện (kèm theo thông qua điển hình "addEventListener (...)"

this.e_sKeyDown = function(control, event) { 
    switch(event.keyCode) { 
    case 13: // enter 
     control.blur() 
     break 
    case 27: // esc = reset selection to it previous value 
     control.setAttribute("data-cancelModify", "true") 
     control.blur() 
     break 
    } 
} 

2 EDIT: mỗi ý kiến ​​/ đề nghị, tôi đã thêm/cho thử này:.

this.e_sOnChange = function(control, event) { 
    control.blur() 
} 

sự kiện đó sẽ cháy, nhưng nó cháy cho mỗi Option khác nhau/s Nói cách khác, nó doesn không xuất hiện mà tôi sẽ có bất kỳ cách nào để xác định xem đó có phải là Tùy chọn mà người dùng thực sự là có ý định để chọn hay chỉ một trong số đó được di chuyển trên đường đi. Để chứng minh, đây là ví dụ cho trang web của jquery. Lưu ý cách các văn bản thay đổi theo từng lên/xuống, bất kể Nhập-key:

http://api.jquery.com/change/

SOLVED: nhờ vào tất cả các bình luận cho đề nghị của họ. Thật vậy, các giải pháp (cho tình hình của tôi anyway) là thêm một "keyup" sự kiện nghe vào hỗn hợp. Tôi không thể nói những trình duyệt này sẽ hoạt động được nhưng nó hoạt động trong các phiên bản sau của Chrome.

+0

Nhập lần 3 => 'onchange', có lẽ? –

+0

Tại sao lệnh nhập thứ ba bị ẩn khỏi trình xử lý 'keydown'? –

+0

onChange ... cảm ơn, tôi sẽ xem xét điều đó. Justin: Tôi không có ý tưởng gì cả, tất cả những gì tôi có thể nói là sự kiện này không kích hoạt với sự lựa chọn trong phần mở rộng của nó. Tôi sẽ đăng xử lý sự kiện. – mjk

Trả lời

2

Mỗi đề xuất, cách nhận sự kiện Enter-key "ẩn" là thêm trình xử lý sự kiện "keyup"; câu hỏi đã được chỉnh sửa để phản ánh giải pháp.

LƯU Ý: câu trả lời này chỉ được đăng để đóng câu hỏi; xin vui lòng cho tín dụng mà nó là do - jesus.tesh và phần còn lại của các bình luận cho các đề xuất của họ ...

Các vấn đề liên quan