2011-03-15 11 views
3

사람은 이미 만들어진 스크립트 나 플러그인이 제공하는 알고겠습니까 : 수는 (대신 사업부 내부 페이지의 모든 또는 전부의) 체크 입력의 이름을 '오프 작동체크 상자 클릭 스크립트 - [SHIFT] 범위 선택/선택 해제, [CTRL] 선택/선택 해제 - 이름 선택을 기반으로합니까?

-Shift click for check/uncheck all in range 
-CTRL click to select or unselect all 

을 :

input[name='user_group[]'] 
input[name='record_group[]'] 

저는 두 가지 스크립트 (javascript 및 jQuery)를 사용하고 있지만 div 또는 테이블의 모든 체크 박스를 기반으로하며 내 스크립트를 롤하거나 다른 스크립트를 수정할만큼 똑똑하지 않습니다. 이것에 대한 Google의 검색은 다소 어려웠습니다 (일반적인 생각은 너무 많습니다).

감사합니다.

답변

-1

나는 이것이 작동해야한다고 생각합니다!

jsFiddle에 데모 작업 : http://jsfiddle.net/SXdVs/3/

var firstIndex = null; 

$(":checkbox").click(function(e) { 
    $this = $(this); 
    if (e.ctrlKey) { 
     if ($this.is(":checked")) { 
      $("input[name='"+ $this.attr("name") +"']").attr("checked", "checked"); 
     } else { 
      $("input[name='"+ $this.attr("name") +"']").removeAttr("checked"); 
     } 
    } else if (e.shiftKey) { 
     $items = $("input[name='"+ $this.attr("name") +"']"); 
     if (firstIndex == null) { 
      firstIndex = $items.index($this); 
     } else { 
      var currentIndex = $items.index($this); 
      var high = Math.max(firstIndex,currentIndex); 
      var low = Math.min(firstIndex,currentIndex); 

      if ($this.is(":checked")) { 
       $items.filter(":gt("+ low +"):lt("+ high +")").attr("checked", "checked"); 
      } else { 
       $items.filter(":gt("+ low +"):lt("+ high +")").removeAttr("checked"); 
      } 

      firstIndex = null; 
     } 
    } 
}); 
+0

감사합니다. 아직 버그가 있습니다. 신선한 실행에서 1을 누른 다음 3 또는 2를 클릭하십시오. 4. Semems가 민감합니다. – Reno

+0

어쨌든 좋은 출발점이 있습니다. ;) – jessegavin

2

나는이 스크립트로 주위를 연주하기 시작, 그것은 CTRL + 클릭 기능 (/ 모든 없음 컨트롤을 선택) 실종 있지만.

원래 형태로 페이지의 모든 체크 박스에 대해 작동합니다. "$ ('input [type = checkbox]')를 변경했습니다. shiftClick();" linke를 "$ ("input [name = 'selected_employees []'] "). shiftClick();" 지금까지는 단 하나의 체크 박스 그룹에 대해서만 완벽하게 작동하는 것으로 보입니다.

내 요구 사항에 대한 유일한 결함은 그룹의 모든 확인란을 선택 또는 선택 해제하는 CTRL + Click 기능이 없다는 것입니다.

<script type="text/javascript"> 
    $(document).ready(function() { 
    // shiftclick: http://sneeu.com/projects/shiftclick/ 
    // This will create a ShiftClick set of all the checkboxes on a page. 
    $(function() { 
     $("input[name='selected_employees[]']").shiftClick(); 
     // $('input[type=checkbox]').shiftClick(); 
    }); 

    (function($) { 
     $.fn.shiftClick = function() { 
      var lastSelected; 
      var checkBoxes = $(this); 

      this.each(function() { 
       $(this).click(function(ev) { 
        if (ev.shiftKey) { 
         var last = checkBoxes.index(lastSelected); 
         var first = checkBoxes.index(this); 

         var start = Math.min(first, last); 
         var end = Math.max(first, last); 

         var chk = lastSelected.checked; 
         for (var i = start; i < end; i++) { 
          checkBoxes[i].checked = chk; 
         } 
        } else { 
         lastSelected = this; 
        } 
       }) 
      }); 
     }; 
    })(jQuery); 
    }); 
</script> 
+0

니스, 나를 위해 작동합니다. –

관련 문제