2010-04-05 133 views
1

我有一個代碼使用Jquery.I排序表使用切換功能來交替點擊,並切換beetween'上升'和'下降'sort.Once你點擊標題的表,它應該排序它的內容。JQuery的切換功能

然而,有一個bug:

我點擊一次,它進行排序,然後當我再次點擊,沒什麼happens.I需要再次點擊(第二次)執行第二功能,和排序一次。

切換應該切換功能與單擊,而不是雙倍,我是嗎?

下面是代碼:

firstRow.toggle(function() { 
     $(this).find("th:first").removeClass("ascendFirst").addClass("descendFirst"); 
     $(this).find("th:not(first)").removeClass("ascend").addClass("descend"); 

     sorted = $.makeArray($("td:eq(0)", "tr")).sort().reverse(); 
     sorted2 = $.makeArray($("td:eq(1)", "tr")).sort().reverse(); 
     sorted3 = $.makeArray($("td:eq(2)", "tr")).sort().reverse(); 

     for (var i = 0; i < sorted.length; i++) { 
      $("td", "tr:eq(" + (i + 1) + ")").remove(); 
      $("tr:eq(" + (i + 1) + ")").append($("<td></td>").text($(sorted[i]).text())); 


      $("tr:eq(" + (i + 1) + ")").append($("<td></td>").text($(sorted2[i]).text())); 


      $("tr:eq(" + (i + 1) + ")").append($("<td></td>").text($(sorted3[i]).text())); 

     } 
    }, function() { 
     $(this).find("th:first").removeClass("descendFirst").addClass("ascendFirst"); 
     $(this).find("th:not(first)").removeClass("descend").addClass("ascend"); 

     sorted = $.makeArray($("td:eq(0)", "tr")).sort(); 
     sorted2 = $.makeArray($("td:eq(1)", "tr")).sort(); 
     sorted3 = $.makeArray($("td:eq(2)", "tr")).sort(); 

     for (var i = 0; i < sorted.length; i++) { 
      $("td", "tr:eq(" + (i + 1) + ")").remove(); 
      $("tr:eq(" + (i + 1) + ")").append($("<td></td>").text($(sorted[i]).text())); 


      $("tr:eq(" + (i + 1) + ")").append($("<td></td>").text($(sorted2[i]).text())); 


      $("tr:eq(" + (i + 1) + ")").append($("<td></td>").text($(sorted3[i]).text())); 

     } 
    }); 
+2

爲什麼不使用tablesorter而不是滾動自己的版本:http://tablesorter.com/ – Powerlord 2010-04-05 14:40:34

+0

原因,我需要學習自己排序 – ozsenegal 2010-04-05 14:46:28

+0

非常好,Oz。我厭倦了人們將我指向其他插件。沒有人問他們如何工作,沒有人通過使用別人的創作來學習任何東西。 – dclowd9901 2010-04-05 14:51:48

回答

1

您的切換代碼看起來不錯。當我遇到需要第二次點擊才能啓動事件的情況時,我已經將切換兩次應用於選擇器(在這種情況下,firstRow)。或者說有多個jQuery對象。

檢查您沒有申請兩次,或者你的代碼附加到一個簡單的DIV,以測試它是否是FIRSTROW選擇的獨立工作。例如:

$("div.testclass").toggle(function() { 
    // do this 
    } 
}, function() { 
    // undo this 
    } 
});​ 

我們可能還需要查看您的HTML。

0

從您的文章,這聽起來像你希望的,如果你的第一和第二之間的點擊等待更長的事情會表現。如果過早地執行操作,雙擊功能可能會讓您再次點擊。如果是這種情況,請將此處理程序綁定到單擊事件和雙擊事件,然後將它們視爲同一事件。