2016-06-18 4 views
1

나는 아래의 jQuery 함수를 작성하여 데이터 테이블에서 필터를 호출했다. 하지만 "변경"jQuery 함수는 한 번의 클릭으로 두 번 호출하는 것처럼 보입니다. 따라서 필터 중 하나를 해제하려고하면 즉시 다시 돌아옵니다.onchange 이벤트 핸들러가 두 번 트리거 됨

기능 : 누군가가 나를 변경 기능을 여러 번 트리거 알려 수 있다면

$(document).ready(function() { 
    var table = $('#example').DataTable({ 
     rowReorder: { 
      selector: 'td:nth-child(2)' 
     }, 
     responsive: true, 

     initComplete: function() { 
      var filters = $('div[id$=referalFilters]').find('input:checkbox'); 
      filters.each(function() { 
       dict.push({ 
        key: $(this).prop('name'), 
        value: $(this).prop('checked') 
       }); 
       $(this).change(function() { 
        var currentName = $(this).prop('name'); 

        for (var i = 0; i < dict.length; i++) { 
         if (dict[i].key == currentName) { 
          if (dict[i].value == true) { 
           dict[i].value = false; 
          } else { 
           dict[i].value = true; 
          } 
         } 
        } 
        for (var i = 0; i < dict.length; i++) { 
         if (dict[i].value == true) { 
          $.fn.dataTable.ext.search.push(function (settings, data, dataIndex) { 
           var currentStatus = data[3]; 
           var found = false; 
           for (var i = 0; i < dict.length; i++) { 
            if (currentStatus == String(dict[i].key)) { 
             if (dict[i].value == true) { 
              found = true; 
             } 
            } 
           } 
           if (found) { 
            return true; 
           } 
           return false; 
          }) 
         } 
        } 
        table.draw(); 
       }); 
      }); 
      //this.api().columns().every(function() { 
      // var column = this; 
      //}); 
     } 

    }); 
}); 

내가, 감사합니다.

다음은 jsfiddle : https://jsfiddle.net/a81h11tc/입니다. Js fiffle에서는 버튼이 전환되는 것으로 보이지만 필터링이 발생하지 않습니다.

+1

동일한 'id'를 공유하는 여러 요소가 있습니까? – melancia

+0

우리를 위해 JSFiddle을 설정하거나이 HTML을 동반 한 스 니펫으로 만들 수 있습니까? –

+0

@AngelosChalaris : 지금 할게요 –

답변

0

내가 알 수있는 한, 귀하의 문제는 정의되지 않은 변수 dictinitComplete입니다. 을 var filters = ... 앞에 붙이면 매력처럼 작동합니다. (내 이해는 열 상태에 클릭 한 필터의 값이 포함 된 행을 숨기고 싶습니다. 반대의 경우에는 그에 따라 코드를 수정하십시오.) 변경된 코드의 JSFiddle은 다음과 같습니다. 네가 원하는대로.

TIP : 그런데이 항상이 같은 물건에 대한 적절한 오류 메시지를 볼 수 있습니다 대부분의 경우에서와 같이 브라우저의 콘솔을 확인하기 위해 기억 (즉, 귀하의 코드는 기본적으로 유일한 문제는 당신을이었다, RefereceError: dict is not defined을 말했다 코드했다).

+0

제 경우에는 오류가 bootsrap이 끝났습니다. js가 두 번 호출 됨 –

관련 문제