2009-05-19 32 views
8

Tôi có một trang sử dụng JQuery và Jeditable để tạo các phần tử văn bản có thể chỉnh sửa trên trang.Phím Tab với các trường JEditable

Trong khi chỉnh sửa phần tử, tôi muốn có thể tab từ phần tử này sang phần tử tiếp theo.

Tôi không chắc chắn làm thế nào để:

  • Sử dụng jeditable hoặc jquery để nắm bắt sự kiện phím tab (keycode = 9)

  • Khi trường hợp được phát hiện, di chuyển tập trung vào các yếu tố tiếp theo và kích hoạt nó qua jeditable

Bất kỳ trợ giúp nào được đánh giá cao. Cảm ơn!

+0

cũng xem câu hỏi http://stackoverflow.com/questions/3890775/tabbing-between-jeditable-fields- in-a-table –

Trả lời

6

Tôi cố gắng tìm ra cách để làm điều đó:

$('div.editbox').bind('keydown', function(evt) { 
    if(evt.keyCode==9) { 
     $(this).find("input").blur(); 
     var nextBox=''; 
     if ($("div.editbox").index(this) == ($("div.editbox").length-1)) { 
       nextBox=$("div.editbox:first");   //last box, go to first 
      } else { 
       nextBox=$(this).next("div.editbox"); //Next box in line 
      } 
     $(nextBox).dblclick(); //Go to assigned next box 
     return false;   //Suppress normal tab 
    }; 
}); 

Mở một tab, nhấn đúp chuột (jeditable được thiết lập vào đây để sử dụng các sự kiện dblclick) sẽ được gửi đến hộp bên cạnh. Nếu đó là hộp chỉnh sửa cuối cùng (được gán một lớp duy nhất, tôi đã gặp sự cố với bộ chọn), nó sẽ chuyển sang phần đầu tiên.

Tôi cũng đã sử dụng tìm ("đầu vào") vì tôi không thể tìm thấy bộ chọn khác đã chọn đầu vào được tạo có thể chỉnh sửa để làm mờ.

Không tối ưu, nhưng nó hoạt động.

+0

Bất cứ ai có được điều này để làm việc? cấu trúc bảng cần phải giống như id/classes, vv –

+0

đã tìm ra ví dụ này không phải là cho datatables. đã phải chuyển div sang td và thêm editbox vào td và lasteditbos vào td –

+0

Hi Mike, tôi đã trả lời theo câu hỏi của bạn: http://stackoverflow.com/questions/3890775/tabbing-between-jeditable -field-in-a-table/7489132 # 7489132 – SylvanK

0

Một giải pháp là làm cho vùng chứa cho các yếu tố có thể chỉnh sửa thực hiện việc nghe hoặc thậm chí là tài liệu. Sau đó, một nhiệm vụ dễ dàng là truy vấn tài liệu hoặc vùng chứa cho các phần tử có thể chỉnh sửa, xác định phần tử nào được chỉnh sửa nhiều nhất và chuyển sang phần tử tiếp theo trong danh sách.

+0

Cảm ơn, nhưng các phần tử có thể chỉnh sửa không xuất hiện để phản hồi tiêu điểm(), là một phần của vấn đề. Tôi không chắc chắn làm thế nào để nói jeditable để cung cấp cho tập trung vào một yếu tố; luân phiên tôi có thể cần phải mô phỏng một doubleclick? Nhưng một người nghe phổ quát cho "tab" không phải là một ý tưởng tồi. – SylvanK

1
$('div.edit').bind('keydown', function(evt) { 
if(evt.keyCode==9) { 
    var nextBox=''; 
    var currentBoxIndex=$("div.edit").index(this); 
    if (currentBoxIndex == ($("div.edit").length-1)) { 
      nextBox=$("div.edit:first");   
     } else { 
      nextBox=$("div.edit").eq(currentBoxIndex+1);  
     } 
    $(this).find("input").blur(); 
    $(nextBox).click(); 
    return false;   
}; 
}); 

làm kiểm tra này nó sẽ giúp bạn

+0

Hassan, đó là mã của riêng tôi để giải quyết vấn đề của người dùng khác với giải pháp của tôi ở trên. http://stackoverflow.com/questions/3890775/tabbing-between-jeditable-fields-in-a-table/7489132#7489132 – SylvanK

0

Chỉ cần một bổ sung nhỏ - nếu lĩnh vực jeditable của bạn được lồng trong các yếu tố khác, các 'nextBox = $ .next (this) ("div.editbox"); ' sẽ không làm việc, vì vậy tạo ra một mảng của các yếu tố 'nhắm' và làm việc từ bên trong ...

$('.editable_textarea').bind('keydown', function(evt) { 
    if(evt.keyCode==9) { 
     $(this).find("input").blur(); 
     // create an array of targeted jeditable fields 
     var boxArray = $("#parent_element").find('.editable_textarea') 
     var nextBox = ''; 
     if ($('.editable_textarea').index(this) == ($('.editable_textarea').length-1)) { 
      nextBox = $(".editable_textarea:first");   //last box, go to first 
     } else { 
      // use the index of the active field to find the next one in the boxArray 
      nextBox = boxArray[$('.editable_textarea').index(this)+1]; //Next box in line 
     } 
     $(nextBox).click(); //Go to assigned next box 
     return false;   //Suppress normal tab 
    }; 
}); 
Các vấn đề liên quan