闪烁我的表行的问题。

时间:2015-05-04 14:18:15

标签: javascript jquery

我有一个页面,其中有一个表格,我必须在确定的条件下闪烁一些行。

此页面是局部视图,我使用setTimeInterval函数加载它。

问题是,在多次加载页面后,闪烁功能变得疯狂,就像间隔时间已经改变一样。

下面是我使用闪烁页面的代码。

    $('#tblSolicitacao').find('tr').each(function () {
        var status = $.trim($(this).find('#solicitante-status').text());
        switch (status) {
            case "Solicitado":
                $(this).addClass('solicitacao');
                var on = false;
                setInterval(function blink() {
                    on = !on;
                    if (on) {
                        $('.solicitacao').addClass('solicitacao-blink');
                        $('.solicitacao').css("color", "white");
                    } else {
                        $('.solicitacao').css("color", "black");
                        $('.solicitacao-blink').removeClass('solicitacao-blink');

                    }
                    return blink;
                }(), 1000);
                break;

。  。  

它在switch子句中,用于检查行的状态。

以下我有调用局部视图的主页面。

$(document).ready(function () {

    loadPagina();

    window.setInterval("loadPagina()", 10000);
});

我真的需要帮助,如果你们需要任何其他解释,请不要犹豫,问我。

事先提前。

2 个答案:

答案 0 :(得分:0)

您正在设置越来越多的间隔。

要么只启动一个单一的间隔,要么在开始新的间隔之前清除前一个间隔:

var blinkInterval = 0
//...
$(this).addClass('solicitacao');
var on = false;
clearInterval(blinkInterval);
blinkInterval = setInterval(function blink() {
    on = !on;
    //...
}(), 1000);

另一种选择是改为使用setTimeout(),只执行一次。

答案 1 :(得分:0)

var BlinkerOn = true;    
$(function(){

  //find the things you want to blink
  $('#tblSolicitacao').find('tr').each(function () {
      var status = $.trim($(this).find('#solicitante-status').text());
      switch (status) {
        case "Solicitado":
            $(this).addClass('solicitacao');
            break;
    };
  });


  //add a single interval
  setInterval(function()
  {
    if(BlinkerOn) {
      $(".solicitacao").addClass("classWithCSSyouWant");
    }
    else {
      $(".solicitacao").removeClass("classWithCSSyouWant");
    }
    BlinkerOn = !BlinkerOn;

  },1000);

});