2015-08-25 17 views
7

Trong một Mặt có thể ghi, khi một tiêu đề cột được bấm, tất cả các ô của cột đó được chọn. Là một cách để ngăn chặn điều này xảy ra?Ngăn không cho các ô có thể cầm tay được chọn trên tiêu đề cột bấm

Tôi không nghĩ rằng có một tùy chọn như vậy trong tài liệu. Tôi không tìm thấy nơi các sự kiện được đăng ký trên DOM trong mã nguồn của thư viện Handsontable.

Bất kỳ gợi ý nào cũng sẽ được đánh giá cao. Cảm ơn.

Trả lời

7

Có thể dừng sự kiện từ tuyên truyền sử dụng beforeOnCellMouseDown móc, ngăn ngừa các tế bào của cột tiêu đề đó được nhấp được lựa chọn:

/** 
* @param {MouseEvent} event 
* @param {WalkontableCellCoords} coords 
* @param {Element} element 
*/ 
var handleHotBeforeOnCellMouseDown = function(event, coords, element) { 
    if (coords.row < 0) { 
    event.stopImmediatePropagation(); 
    } 
}; 

Handsontable.hooks.add('beforeOnCellMouseDown', 
    handleHotBeforeOnCellMouseDown, handsontable); 

Một cảm ơn rất đặc biệt để Gustavo sự giúp đỡ của mình!

+0

'stopPropogation' có thể là lựa chọn tốt hơn trong một số trường hợp (xem http://stackoverflow.com/questions/5299740/jquery-stoppropagation-vs-stopimmediatepropagation) –

+1

Điều này không hiệu quả đối với tôi trong 0,18. Sự kiện kích hoạt không sao, nhưng gọi stopImmediatePropagation() không ngăn các lựa chọn ô – Eric

+0

Vấn đề tương tự như @Eric – Petah

3

Tôi không nghĩ rằng có thể ngăn chặn hành vi đó. Tôi đã không tìm thấy bất kỳ đầu mối nào trong tài liệu cũng như không nhanh chóng kiểm tra mã nguồn.

Tuy nhiên, bạn có thể bỏ chọn các ô đã chọn ngay sau khi chúng được chọn. Việc ràng buộc một hàm để xử lý sự kiện nhấn ô sẽ thực hiện thủ thuật. Bạn có thể làm điều đó bằng cách đăng ký gọi lại khi instantiating handsontable của bạn:

$('#my_handsontable').handsontable({ 
    ... 
    afterOnCellMouseDown: function(event, coords){ 
     // 'coords.row < 0' because we only want to handle clicks on the header row 
     if (coords.row < 0){ 
      $('#my_handsontable').handsontable('deselectCell'); 
     } 
    }, 
    ... 
}); 

Hoặc bằng một cái móc:

Handsontable.hooks.add('afterOnCellMouseDown', function(event, coords){ 
    if (coords.row < 0){ 
     $('#my_handsontable').handsontable('deselectCell'); 
    } 
}); 

Ngoài ra, bạn có thể chỉnh sửa mã nguồn handsontable và bình luận các đoạn mã trong walkontableConfig mà không chọn toàn bộ cột khi một tế bào tiêu đề được nhấp:

var walkontableConfig = { 
    ... 
    onCellMouseDown: function (event, coords, TD, wt) { 
     ... 
     // if (coords.row < 0) { 
     // instance.selectCell(0, coords.col, instance.countRows() - 1, coords.col); 
     // instance.selection.setSelectedHeaders(false, true); 
     // } 
     ... 
    }, 
    ... 
}; 
+0

Mmm, tôi sẽ phải thử điều này nhưng tôi đoán rằng sẽ không làm việc cho tôi như tôi đã hooking vào "tế bào lựa chọn". Nó thậm chí làm những điều không đồng bộ, do đó, làm "bỏ chọn" ngay sau khi có thể có hành vi xấu. Tôi chắc chắn sẽ thử và báo cáo lại. Cảm ơn rất nhiều vì đã trả lời. –

+0

Cách khác, bạn có thể chỉnh sửa nguồn có thể ghi được để loại bỏ hành vi đó. Xem câu trả lời chỉnh sửa của tôi ở trên. Cá nhân, tôi không thích chỉnh sửa thư viện của bên thứ ba vì điều đó làm tăng thêm sự phức tạp khi nâng cấp các thư viện đó, nhưng trong một số trường hợp có thể là giải pháp duy nhất. –

+0

Vâng, tôi không thích làm điều này, nhưng hey, đó có thể là một đóng góp tốt đẹp nếu tôi từng đi xa như vậy: làm cho tùy chọn này. Cảm ơn vì những lời khuyên. –

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