表行重新排序时出现延迟()错误

时间:2011-07-23 11:54:12

标签: jquery removeclass

我有一个简单的脚本来更改cms的页面顺序。它基于使用jQuery重新排序表行。现在的问题是,我想要延迟从整行中删除高亮类。它会忽略delay()并立即将其删除。

这个想法是,当你将鼠标悬停在一行上时,它会向其添加cell_rollover类。当您单击向上/向下箭头时,该类将保留到该行 - 显示该行已移动。所以在大约200毫秒后,它应该删除该类。它不.. ..

箭头的代码:

$(".listtable_up, .listtable_down").click(function() {
    var row = $(this).parents("tr:first");
    if ($(this).is(".listtable_up")) {
        row.insertBefore(row.prev());
    } else {
        row.insertAfter(row.next());
    }
    row.delay("200").removeClass('cell_rollover');
});

注意:使用jQuery脚本将cell_rover类添加到行中:

$(".listtable tbody td").hover(function () {
    $(this).closest('tr').addClass('cell_rollover');
}, function () {
    $(this).closest('tr').removeClass('cell_rollover');
});

为什么会发生这种情况以及如何解决?

修改 我的一般想法的解决方案是以jquery效果突出显示的形式:http://jsfiddle.net/sZdre/1/ 但是,仍然试图弄清楚,为什么延迟不会像它应该的那样......

4 个答案:

答案 0 :(得分:1)

用肉眼尝试延迟非常接近无法察觉

.delay(2000)

2000 = 2 seconds

duration: An integer indicating the number of milliseconds to delay execution of
          the next item in the queue.

jquery delay

<强>更新

$(".listtable_up, .listtable_down").click(function() {
    var row = $(this).parents("tr:first");
    if ($(this).is(".listtable_up")) {
        row.insertBefore(row.prev()).delay(200).removeClass('cell_rollover');
    } else {
        row.insertAfter(row.next()).delay(200).removeClass('cell_rollover');
    }        
});

答案 1 :(得分:0)

所以最初的想法是突出显示刚重新排序的行:http://jsfiddle.net/sZdre/1/

延迟错误尚未弄明白......

答案 2 :(得分:0)

这是非常晚的,因为我发现这篇文章正在寻找其他内容。

如果您仍在处理此问题并遇到问题,则应该查看队列。 removeClass不是队列的一部分,你需要将它添加到队列中以使延迟工作,否则它只是删除类而不等待特定的时间。

$(document.body).click(function () {
  $("div").show("slow");
  $("div").animate({left:'+=200'},2000);
  $("div").queue(function () {
    $(this).addClass("newcolor");
    $(this).dequeue();
  });
  $("div").animate({left:'-=200'},500);
  $("div").queue(function () {
    $(this).removeClass("newcolor");
    $(this).dequeue();
  });
  $("div").slideUp();
});

这个例子对我来说最有意义。我希望这可以帮助你,因为我目前正在解决类似的问题,几分钟前我已经解决了这个问题:)

答案 3 :(得分:0)

使用window.setInterval()

实现了所需的行为
$element.addClass('cell_rollover');
window.setTimeout(() => $element.removeClass('cell_rollover'), 500);
window.setTimeout(() => $element.addClass('cell_rollover'), 1000);
window.setTimeout(() => $element.removeClass('cell_rollover'), 1500);

我认为delay()无效,因为您可能使用tablesorter.jquery.js。如果是这种情况,tablesorter具有覆盖jQuery delay()方法的名为delay()的方法。