2016-10-03 2 views
1

가장 가까운 체크 박스를 제외한 모든 메뉴 (모든 메뉴 내)를 선택 해제하는 체크 박스 메뉴에 '전용'버튼을 만들려고합니다. enter image description here확인란 메뉴에 '유일한'버튼을 만드는 방법은 무엇입니까?

나는 작동하는 몇 가지 코드를 가지고 있지만, 그것은 해킹의 일종 대신 내가 좋아하는 1 개 라인 뭔가 말씀을 전합니다 :

  • 경우 $ (이) .closest ('. 또한

같이 체크 박스를 떠나 다른, 다음 취소checked입니다 입력 ')'). (찾기 ', 나는 사용자가 실제로 CL로 발사 할 수있는 이벤트가 필요합니다 icked (triggerHandler)입니까?

$('.only').on('click', function() { 
 

 
    $(this).closest('.checkbox').find('input').prop('checked', false); 
 
    $(this).closest('.row').find('input').prop('checked', true); 
 
    $(this).closest('.checkbox').find('input').prop('checked', false); 
 
    $(this).closest('.row').find('input').trigger('click'); 
 
});
.only { 
 
    border: 1px solid rgb(115, 135, 156); 
 
    float: right; 
 
    border: 1px; 
 
    border-radius: 5px; 
 
    padding-right: 7px; 
 
    padding-left: 7px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="checkbox"> 
 
        <div class="row"> 
 
         <div class="right"> 
 
         <div class="only">only</div> 
 
         </div> 
 
        <label> 
 
         <input name="countryOriginMenu" value="Not provided" checked="checked" type="checkbox"> 
 
         <span>Frist</span> 
 
        </label> 
 
        </div> 
 
        <div class="row"> 
 
         <div class="right"> 
 
         <div class="only">only</div> 
 
         </div> 
 
        <label> 
 
         <input name="countryOriginMenu" value="Not provided" checked="checked" type="checkbox"> 
 
         <span>Second</span> 
 
        </label> 
 
        </div> 
 
        <div class="row"> 
 
         <div class="right"> 
 
         <div class="only">only</div> 
 
         </div> 
 
        <label> 
 
         <input name="countryOriginMenu" value="Not provided" checked="checked" type="checkbox"> 
 
         <span>Third</span> 
 
        </label> 
 
        </div> 
 
        
 
</div>

https://jsfiddle.net/2m0cu795/

:

답변

1

당신은 잘못된 이벤트를 트리거를 이용 변화 중복 행을 제거합니다. 참고 : "클릭"을 실행하면 값이 변경되지만 "변경"은 변경되지 않습니다.

$('.only').on('click', function() { 
    $(this).closest('.checkbox').find('input[type="checkbox"]').prop('checked', false); 
    $(this).closest('.row').find('input[type="checkbox"]').prop('checked', true).trigger('change'); 
}); 

다른 방법으로는, 현재 사람의 값을 변경할 수 없습니다, 어떤 값 (유일한) 하나 : 다른 체크 박스에

$('.only').on('click', function() { 
    var cb = $(this).closest('.checkbox').find('input[type="checkbox"]'); 
    var me = $(this).closest('.row').find('input[type="checkbox"]'); 
    cb.not(me).prop('checked', false); 
    me.trigger('change'); 
}); 

또는 트리거를 수행합니다 (그들은 사람이 있기 때문에 변경)

cb.not(me).prop('checked', false).trigger('change'); 
0

클릭에 :

  • 는 그렇지 않은 경우에 현재를 확인합니다.
  • 현재 항목을 제외한 모든 항목의 선택을 취소하십시오.

이 jsfiddle 참조 : https://jsfiddle.net/4bjtuunr/5/

$('.only').on('click', function() { 
    var $current = $(this).closest('.row').find('input'); 
    var $cbxs = $(this).closest('.checkbox').find('input'); 
    $current.prop('checked', true); 
    $cbxs.not($current).prop('checked', false); 
}); 
+0

내가 OP에서 언급 한 바와 같이, 나는 조건부/선택 해제를 선택해야합니다. 이유 중 하나는 상자를 선택하지 않으면 트리거하는 오류 메시지가 있다는 것입니다. – Dambo

+0

나는 당신이 무슨 뜻인지 이해하지 못한다. 조건부의 예는 "선택하면 선택 취소합니다. 그렇지 않으면 선택을 해제합니다"라고 말합니다. 왜 조건부가 필요합니까? 그 경우 결과는 동일합니까? – amcdrmtt

+0

당신의 (그리고 저의) 솔루션이하는 것이 아닙니다. 나는 또한 체크 박스가 필터이고 클릭 이벤트가 없다면 재 계산이 트리거되지 않는 대시 보드를 가지고 있기 때문에 사용자 클릭을 시뮬레이트 할 필요가있다. 나는 JQuery에 익숙하지 않지만 내 이해는'prop (' checked ', true)'버튼의 모양 만 변경합니다. 알았어. – Dambo

0

사용 방법은 어떻습니까? 이렇게하면 검사 할 조건이 너무 많이없이 현재의 확인란의 상태를 유지하는 데 도움이됩니다.

var row = $(this).parents(".row"); 
    row.siblings().find('input').prop('checked', false); 
    row.find('input').prop('checked', true); 

https://jsfiddle.net/ydzbddd5/4/

+1

'$ ($ (this) .parents (". row")). 형제()'는 간단히 $ (this) 부모님 ("행") 일 수 있습니다. 형제()'? –

+0

그 점을 지적 해 주셔서 감사합니다 –

+0

새 줄'var r = $ (this) .parents (". row"); r.siblings()'와'r.find ('는 더블 돔 프로세스를 피한다.) –

관련 문제