1

我有一个简单的脚本来更改 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');
});

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

$(".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

4 回答 4

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');
    }        
});
于 2011-07-23T11:56:57.487 回答
0

所以解决了最初的想法,突出刚刚重新排序的行:http: //jsfiddle.net/sZdre/1/

延迟错误尚未弄清楚..

于 2011-07-26T14:57:15.183 回答
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();
});

这个例子对我来说最有意义。我希望这对您有所帮助,因为我目前正在处理一个类似的问题,并且几分钟前我已经解决了一个这样的问题:)

于 2011-09-26T17:22:20.290 回答
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 有调用delay()的方法覆盖 jQuerydelay()方法。

于 2018-03-26T20:31:20.723 回答