我有一个使用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()));
}
});
答案 0 :(得分:1)
您的切换代码看起来不错。当我遇到需要第二次点击才能触发事件的情况时,我已将两次切换应用于选择器(在本例中为 firstRow )。或者说有多个jQuery对象。
检查您是否未应用过两次,或将代码附加到简单的 div ,以测试其是否独立于 firstRow 选择器。例如:
$("div.testclass").toggle(function() {
// do this
}
}, function() {
// undo this
}
});
我们可能也需要查看您的HTML。
答案 1 :(得分:0)
从你的帖子中,如果你在第一次和第二次点击之间等待的时间更长,听起来就像你预期的那样。如果你太快完成,双击功能可能会吃掉你的第二次点击。如果是这种情况,请将此处理程序绑定到单击和双击事件,然后将它们视为同一事件。