2014-08-15 3 views
0

Я хочу отключить сортировку столбцов таблицы, когда #addData видна , но когда я применяю if ($("#addData").is(":hidden")) к функции .each(), она не работает ,

Есть ли способ сделать это?

Вот таблица кода сортировки:

$('th:contains(Remote), th:contains(Interval),th:contains(Last), th:contains(Active)') 
    .each(function(){ 

     var th = $(this), 
      thIndex = th.index(), 
      inverse = false; 

     th.click(function(){ 

      table.find('td').filter(function(){ 

       return $(this).index() === thIndex; 

      }).sortElements(function(a, b){ 

       return $.text([a]) > $.text([b]) ? 
        inverse ? -1 : 1 
        : inverse ? 1 : -1; 

      }, function(){ 

       // parentNode is the element we want to move 
       return this.parentNode; 

      }); 

      inverse = !inverse; 

     }); 

    }); 


jQuery.fn.sortElements = (function(){ 

    var sort = [].sort; 

    return function(comparator, getSortable) { 

     getSortable = getSortable || function(){return this;}; 

     var placements = this.map(function(){ 

      var sortElement = getSortable.call(this), 
       parentNode = sortElement.parentNode, 

       // Since the element itself will change position, we have 
       // to have some way of storing its original position in 
       // the DOM. The easiest way is to have a 'flag' node: 
       nextSibling = parentNode.insertBefore(
        document.createTextNode(''), 
        sortElement.nextSibling 
       ); 

      return function() { 

       if (parentNode === this) { 
        throw new Error(
         "You can't sort elements if any one is a descendant of another." 
        ); 
       } 

       // Insert before flag: 
       parentNode.insertBefore(this, nextSibling); 
       // Remove flag: 
       parentNode.removeChild(nextSibling); 

      }; 

     }); 

     return sort.call(this, comparator).each(function(i){ 
      placements[i].call(getSortable.call(this)); 
     }); 

    }; 

})(); 

ответ

2

Добавить проверку visiblity на событие щелчка созванного по го. Это можно сделать немного более эффективным, если вы храните #addData в переменной внутри каждого.

$('th:contains(Remote), th:contains(Interval),th:contains(Last), th:contains(Active)') 
    .each(function(){ 

     var th = $(this), 
      thIndex = th.index(), 
      inverse = false; 
     //BOOSTIE: var addData = $('#addData'); 
     th.click(function(){ 
      //BOOSTIE: if(addData.is(':hidden')) 
      if($("#addData").is(":hidden")) //Check to see if its visible 
      { 
       table.find('td').filter(function(){ 

        return $(this).index() === thIndex; 

       }).sortElements(function(a, b){ 

        return $.text([a]) > $.text([b]) ? 
         inverse ? -1 : 1 
         : inverse ? 1 : -1; 

       }, function(){ 

        // parentNode is the element we want to move 
        return this.parentNode; 

       }); 

       inverse = !inverse; 
      } 
     }); 

    }); 
+0

cgatian! Я постараюсь сделать это первым, когда завтра приеду на работу. Спасибо. –

+0

Отлично работает! Еще раз спасибо! –

Смежные вопросы