2017-05-26 46 views
2

我當文檔加載,使其能夠點擊與類「頭」的每個元素擴大,顯示出更多的細節,被稱爲事件:文件Click事件停止了過濾

$(document).ready(function() { 
    InitClick(); 
}); 

這裏功能:

function InitClick() { 
    $('.header').click(function() { 
     $(this).nextUntil('tr.header').slideToggle(); 
    }); 
} 

現在的問題是,當結果得到過濾,它就會導致該點擊事件停止,直到我重新初始化它,然後它會重新開始工作......直到數據過濾再次或必須更新。

現在我的主要問題是,有沒有人得到一個可以幫助我的東西的鏈接,我試過把它放在$ watch上,但是我保留的主要問題是在過濾的數據返回之前調用它,導致它在數據存在之前進行初始化。

這是MyApp.js如果有幫助嗎?

var MyApp = angular.module('MyApp', []); 

MyApp.controller('MyAppCtrl', function ($scope, $filter) { 
    $scope.Users = tJSONData; 
    $scope.currentPage = 0; 
    $scope.pageSize = 3; 
    $scope.Pages = []; 

    $scope.search = ''; 
    $scope.Completed = ''; 


    $scope.getData = function() { 
    return $filter('filter')($scope.Users, $scope.search ||  $scope.Completed); 
    } 

    $scope.numberOfPages = function() { 
     return Math.ceil($scope.getData().length/$scope.pageSize); 
    } 

    $scope.$watch('numberOfPages()', function (newVal, oldVal) { 
     var tPages = []; 
     for (i = 0; i < $scope.numberOfPages(); i++) { 
      tPages.push(i + 1); 
     } 

     if ($scope.currentPage >= $scope.numberOfPages()) { 
      $scope.currentPage = $scope.numberOfPages() - 1; 
     } 

     if ($scope.currentPage == -1) { 
      $scope.currentPage = 0; 
     } 
     return $scope.Pages = tPages; 
    }) 

    $scope.updatePage = function() { 
     $scope.$apply(function() { 
      $scope.Users = tJSONData 
     }) 
    } 

    $scope.limitPagination = function() { 
     if ($scope.currentPage == 0) { 
      return $scope.currentPage; 
     } else if ($scope.currentPage == 1) { 
      return $scope.currentPage - 1 
     } else { 
      return $scope.currentPage - 2; 
     } 
    } 
}); 

MyApp.filter('startFrom', function() { 
    return function (input, start) { 
     start =+ start; //parse to int 
     return input.slice(start); 
    } 
}); 

任何幫助表示讚賞:)

回答

0

簡而言之,當你調用$(selector).click(或任何其他事件),它只會設置事件在的時候被抓住的元素呼叫。如果元素被移除並被替換(看起來像你的情況),新元素不會自動擁有它。

而不是使用$(selector).click(callback)的,使用$(document).on('click', selector, callback)

在你的情況下,它看起來像這樣應該做的伎倆:

$(document).on('click', '.header', function() { 
    $(this).nextUntil('tr.header').slideToggle(); 
}); 

不同的是,這樣一來,該事件實際上是綁定到document本身,它永遠不會改變。然後過濾,只有當你點擊一個.header時纔會觸發,但它會應用於所有這些,即使在調用此位後添加的那些。

+0

不幸的是,改變它停止發生的事件:(感謝您的嘗試:) –

+0

我給你的東西應該已經完成​​了。它拋出任何控制檯錯誤或任何東西? – samanime

+0

沒有,我唯一能想到的就是添加處理程序,然後當添加一個新對象時,我不認爲它會有處理程序。我需要找出一種方法來調用它,每次它改變,但我不是100%確定如何做到這一點。至於爲什麼它阻止它工作,不是一個線索。 –