Jquery切换功能

时间:2010-04-05 14:39:01

标签: jquery sorting toggle

我有一个使用Jquery对表进行排序的代码。我使用切换功能来替换点击,并在'ascend'和'descend'排序之间切换。一旦你点击标题的表,它应该对它进行排序。

然而,有一个错误:

我点击一次,它排序,然后当我再次点击时,没有任何反应。我需要再次点击(第二次)执行第二个功能,然后再次排序。

Toggle应该通过单击来切换功能,而不是双倍,我是对的吗?

以下是代码:

 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 个答案:

答案 0 :(得分:1)

您的切换代码看起来不错。当我遇到需要第二次点击才能触发事件的情况时,我已将两次切换应用于选择器(在本例中为 firstRow )。或者说有多个jQuery对象。

检查您是否未应用过两次,或将代码附加到简单的 div ,以测试其是否独立于 firstRow 选择器。例如:

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

我们可能也需要查看您的HTML。

答案 1 :(得分:0)

从你的帖子中,如果你在第一次和第二次点击之间等待的时间更长,听起来就像你预期的那样。如果你太快完成,双击功能可能会吃掉你的第二次点击。如果是这种情况,请将此处理程序绑定到单击和双击事件,然后将它们视为同一事件。