2012-06-20 48 views
8

Có thể dừng sắp xếp bảng nếu người dùng nhấp vào div bên trong tiêu đề bảng th?Bộ sắp xếp bảng jQuery: dừng sắp xếp

Trong trường hợp div của tôi có chức năng onClick="resize(e)" mà tôi làm:

function resize(e) { 
     if (!e) var e = window.event; 
     e.stopPropagation(); 
     .... 

Nhưng nó không hoạt động.

Edit: Bảng được sắp xếp trước e.stopPropagation() hoặc return false

+1

Thay vì sử dụng 'thuộc tính onClick', hãy thử gắn một sự kiện nhấp chuột sử dụng jQuery (cái gì đó như '$ ("div thứ") click (function (event) {}). 'và đặt mã thay đổi kích thước của bạn trong hàm đó. Sau đó' event.stopPropagation() 'có thể hoạt động. – MrOBrian

+0

Cảm ơn bạn, nhưng tôi cũng đã thử nó như Ajay beni chỉ ra – andriy

+0

Bạn có thể hiển thị mã trực tiếp hoặc tốt hơn là [jsfiddle] (http://jsfiddle.net) – Jashwant

Trả lời

7

tôi thực hiện hai bản demo cho bạn. Người đầu tiên có nội dung của tiêu đề bảng được bao bọc trong một khoảng và phần thứ hai sử dụng hàm onRenderHeader không có giấy tờ để thêm span vào tiêu đề. Dù bằng cách nào, chỉ có nội dung của span là có thể nhấp (văn bản) trong khi nhấp vào bên ngoài nội dung sẽ sắp xếp cột. Nếu bạn sử dụng div chỉ có phần đệm đầu trang có sẵn để khởi tạo một loại cột.

Demo 1 - nội dung tiêu đề bọc trong đánh dấu

$('table') 
    .tablesorter() 
    .find('.inner-header') 
    .click(function(){ 
     console.log('header text clicked'); 
     return false; 
    }); 

Demo 2 - nội dung tiêu đề gói bằng cách sử dụng onRenderHeader tùy chọn

$('table').tablesorter({ 

    // customize header HTML 
    onRenderHeader: function(index) { 
     $(this) 
      .wrapInner('<span class="inner-header"/>') 
      .find('.inner-header') 
      .click(function(){ 
       console.log('header text clicked'); 
       return false; 
      }); 
    } 

});​ 

Nếu bạn cần biết thêm thông tin về cách sử dụng tùy chọn onRenderHeader, hãy kiểm tra blog post của tôi về những gì còn thiếu trong tài liệu.

4

Dừng propogation ngăn chặn sự kiện từ bọt lên nhưng nó bạn muốn hủy bỏ hành động mặc định, bạn nên sử dụng event.preventDefault()

+0

Không được, bảng này được sắp xếp trước và sau đó chức năng này được gọi, làm thế nào để thực hiện chức năng này trước khi sắp xếp bảng? – andriy

+0

Thưa Andriy tôi nghĩ nó phụ thuộc vào cấu trúc html của bạn Su bạn có một kịch bản như

sau đó nếu bạn đính kèm sự kiện onclick vào TH thì sự kiện sẽ phát ra từ div thành TH và sau đó bên trong chức năng onclick bạn có thể kiểm tra nguồn sự kiện và nếu đó là div bạn có thể sử dụng sự kiện để TH do đó sự kiện sắp xếp chính sẽ không được kích hoạt –

+0

Vẫn sắp xếp: \ theo nguồn sự kiện bạn có nghĩa là 'if (event.srcElement.className ==" resizer ")'? – andriy

4

Tôi vừa gặp sự cố chính xác này. Tôi đã thử mọi thứ được đề xuất, bao gồm việc gán trực tiếp một trình xử lý sự kiện không được ủy quyền cho phần tử chính xác mà tôi muốn, sau đó dừng tất cả các tuyên truyền + chính sự kiện đó. Vẫn không có may mắn.

Nhưng .... nó quay ra tablesorter jQuery gán một sự kiện vào mouseup sự kiện, không phải là sự kiện nhấp chuột (như bạn mong muốn!). Vì vậy, để ngăn chặn tablesort làm điều đó, bạn chỉ cần hủy bỏ sự kiện đó để thay thế. Hi vọng điêu nay co ich.

  • Bến