jQuery 체크 박스 변경 및 클릭 이벤트


564

$(document).ready(function() {
  //set initial state.
  $('#textbox1').val($(this).is(':checked'));

  $('#checkbox1').change(function() {
    $('#textbox1').val($(this).is(':checked'));
  });

  $('#checkbox1').click(function() {
    if (!$(this).is(':checked')) {
      return confirm("Are you sure?");
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" id="checkbox1"/><br />
<input type="text" id="textbox1"/>

여기서는 .change()텍스트 상자 값을 확인란 상태로 업데이트합니다. .click()선택을 취소 할 때 작업을 확인하는 데 사용 합니다. 사용자가 취소를 선택하면 .change()확인 표시가 복원되지만 확인 전에 실행됩니다.

그러면 일관된 상태가 유지되지 않으며 확인란을 선택하면 텍스트 상자에 false가 표시됩니다.

취소를 처리하고 텍스트 상자 값을 확인 상태와 일치하게 유지하려면 어떻게합니까?


1
FF와 크롬에서 작동하며 IE 8에서 설명 된 동작을 가지고 있습니다. 따라서 작동 해야하는 브라우저와 오류가 발생하는 브라우저를 확인하는 것이 중요 할 수 있습니다.
kasdega

그것은 최고는 아니지만 http://jsfiddle.net/Skooljester/2Xxcn/ 에서 나를 위해 일하고 있다고 생각합니다 .
ayyp

답변:


904

JSFiddle 에서 테스트되었으며 원하는 것을 수행합니다.이 방법은 확인란과 관련된 레이블을 클릭하면 발생하는 이점이 있습니다.

업데이트 된 답변 :

$(document).ready(function() {
    //set initial state.
    $('#textbox1').val(this.checked);

    $('#checkbox1').change(function() {
        if(this.checked) {
            var returnVal = confirm("Are you sure?");
            $(this).prop("checked", returnVal);
        }
        $('#textbox1').val(this.checked);        
    });
});

원래 답변 :

$(document).ready(function() {
    //set initial state.
    $('#textbox1').val($(this).is(':checked'));

    $('#checkbox1').change(function() {
        if($(this).is(":checked")) {
            var returnVal = confirm("Are you sure?");
            $(this).attr("checked", returnVal);
        }
        $('#textbox1').val($(this).is(':checked'));        
    });
});

128
그냥 메모, 그것을 사용하는 것이 훨씬 빠릅니다 this.checked대신 $(this).is(':checked'): jsperf.com/prop-vs-ischecked/5
다코타

37
@Dakota 물론, 속도는 훨씬 느리지 만 여전히 초당 600k 작업을 이야기하고 있습니다. 따라서 밀리 초당 600 번. 웹 페이지에서 성능 문제가 발생하기 시작하면 자바 스크립트를 다시 평가해야 할 수도 있습니다.) 코드로 성능 지표를 이해하는 것이 좋습니다. 감사.
Mike U

51
@ MikeU : 조기 최적화에 동의하지만 this.checked작성 하는 것이 훨씬 짧고 + 네이티브 자바 스크립트를 고려할 때 일반적으로 사용하는 것이 좋습니다 (약 200 ~ 300 배 빠름).
Levite

11
후자는 모든 경우에 작동하지 않으므로 jQuery가 .prop ()를 권장한다고 믿기 때문에 .attr () 대신 .prop ()를 권장합니다.
kabadisha 2016 년

2
[this] in $ ( '# textbox1'). val (this.checked); 문서를 나타냅니다. $ ( '# textbox1'). val ($ ( '# checkbox1'). is ( ': checked'))이어야합니다.
yurin

90

데모

사용하다 mousedown

$('#checkbox1').mousedown(function() {
    if (!$(this).is(':checked')) {
        this.checked = confirm("Are you sure?");
        $(this).trigger("change");
    }
});

확인 할 때 경고를 표시하며 항상 확인하지 못하게합니다. 이것은 Chrome에 있습니다.
pimvdb

@pimvdm과 동일합니다. 확인 작업에도 확인 팝업이 표시되며 (확인을 취소 할 때만 팝업되어야 함) 확인을 선택해도 확인란이 선택되지 않습니다.
카오스 교수 :

1
마우스를 사용할 때 작동하지만 키보드로 확인하는 경우에는 작동하지 않습니다.
frinux

3
@frinux 그것은 마우스 관련 질문 이기 때문에 아주 간단 합니다. 완전히 분리 된 문제와의 관련성에 따라 답을 공표하지 마십시오. 키보드를 통해 확인란을 확인한 후 표시기 상태를 트리거하는 데 문제가있는 경우 부주의하게 답을 내리는 대신 표시에 대한 질문을 게시하십시오.
Joseph Marikle

3
마우스 다운은 사용자가 확인란과 상호 작용할 수있는 유일한 방법이 아니기 때문에 하향식입니다.
Jonathan

51

을 사용하면 대부분의 답변이 (아마도) 그것을 잡지 못합니다 <label for="cbId">cb name</label>. 즉, 레이블을 클릭하면 확인란을 직접 클릭하지 않고 확인란을 선택합니다. (정확한 질문은 아니지만 다양한 검색 결과가 여기에 오는 경향이 있습니다)

<div id="OuterDivOrBody">
    <input type="checkbox" id="checkbox1" />
    <label for="checkbox1">Checkbox label</label>
    <br />
    <br />
    The confirm result:
    <input type="text" id="textbox1" />
</div>

이 경우 다음을 사용할 수 있습니다.

Earlier versions of jQuery:

$('#OuterDivOrBody').delegate('#checkbox1', 'change', function () {
    // From the other examples
    if (!this.checked) {
        var sure = confirm("Are you sure?");
        this.checked = !sure;
        $('#textbox1').val(sure.toString());
    }
});

jQuery 1.6.4를 사용한 JSFiddle 예제

jQuery 1.7+

$('#checkbox1').on('change', function() { 
    // From the other examples
    if (!this.checked) {
        var sure = confirm("Are you sure?");
        this.checked = !sure;
        $('#textbox1').val(sure.toString());
    }
});

최신 jQuery 2.x를 사용한 JSFiddle 예제

  • 클릭 가능한 확인란 레이블이있는 HTML 예제 및 HTML 추가

1
#OuterDivOrBody 아닙니다. OuterDivOrBody :)
Laurent Brieu

24

음 .. 두통을 줄이기 위해 (자정이 지난 자정), 나는 생각해 낼 수 있습니다.

$('#checkbox1').click(function() {
  if (!$(this).is(':checked')) {
    var ans = confirm("Are you sure?");
     $('#textbox1').val(ans);
  }
});

그것이 도움이되기를 바랍니다.


11

나를 위해 이것은 훌륭하게 작동합니다.

$('#checkboxID').click(function () {
    if ($(this).attr('checked')) {
        alert('is checked');
    } else {
        alert('is not checked');
    }
})

4
웹 검색을 통해이 문제를 발견했습니다. 'attr'대신 'prop'를 사용해야합니다. >> api.jquery.com/prop
Dr

11

여기 있어요

HTML

<input id="ProductId_a183060c-1030-4037-ae57-0015be92da0e" type="checkbox" value="true">

자바 스크립트

<script>
    $(document).ready(function () {

      $('input[id^="ProductId_"]').click(function () {

        if ($(this).prop('checked')) {
           // do what you need here     
           alert("Checked");
        }
        else {
           // do what you need here         
           alert("Unchecked");
        }
      });

  });
</script>

6

변경 이벤트를 제거하고 대신 클릭 이벤트에서 텍스트 상자의 값을 변경하십시오. 확인 결과를 반환하는 대신 var에서 확인하십시오. 참이면 값을 변경하십시오. 그런 다음 var를 반환하십시오.


6

확인란 클릭 및 동일한 이벤트 루프에서 값을 확인하는 것이 문제입니다.

이 시도:

$('#checkbox1').click(function() {
    var self = this;
    setTimeout(function() {

        if (!self.checked) {
            var ans = confirm("Are you sure?");
            self.checked = ans;
            $('#textbox1').val(ans.toString());
        }
    }, 0);
});

데모 : http://jsfiddle.net/mrchief/JsUWv/6/


6

iCheck Jquery를 사용하는 경우 아래 코드를 사용하십시오.

 $("#CheckBoxId").on('ifChanged', function () {
                alert($(this).val());
            });

5

이 시도

$('#checkbox1').click(function() {
        if (!this.checked) {
            var sure = confirm("Are you sure?");
            this.checked = sure;
            $('#textbox1').val(sure.toString());
        }
    });

5
$(document).ready(function() {
    //set initial state.
    $('#textbox1').val($(this).is(':checked'));

    $('#checkbox1').change(function() {
        $('#textbox1').val($(this).is(':checked'));
    });

    $('#checkbox1').click(function() {
        if (!$(this).is(':checked')) {
            if(!confirm("Are you sure?"))
            {
                $("#checkbox1").prop("checked", true);
                $('#textbox1').val($(this).is(':checked'));
            }
        }
    });
});

4
// this works on all browsers.

$(document).ready(function() {
    //set initial state.
    $('#textbox1').val($(this).is(':checked'));

    $('#checkbox1').change(function(e) {
        this.checked =  $(this).is(":checked") && !!confirm("Are you sure?");
        $('#textbox1').val(this.checked);
        return true;
    });
});

4
$('#checkbox1').click(function() {
    if($(this).is(":checked")) {
        var returnVal = confirm("Are you sure?");
        $(this).attr("checked", returnVal);
    }
    $('#textbox1').val($(this).is(':checked')); 
});


<div id="check">
    <input type="checkbox" id="checkbox1" />
    <input type="text" id="textbox1" />
</div>

4

늦은 답변이지만 사용할 수도 있습니다 on("change")

$('#check').on('change', function() {
     var checked = this.checked
    $('span').html(checked.toString())
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" id="check" > <span>Check me!</span>


1

단순히 클릭 이벤트를 사용하십시오. 내 확인란 ID는 CheckAll입니다.

     $('#CheckAll').click(function () {

        if ($('#CheckAll').is(':checked') == true) {

             alert(";)");
      }
    }

1

이름으로 라디오 가치를 얻다

 $('input').on('className', function(event){
        console.log($(this).attr('name'));
        if($(this).attr('name') == "worker")
            {
                resetAll();                 
            }
    });

1

왜 모든 사람들이 이것을 그렇게 복잡하게 만들고 있는지 잘 모르겠습니다. 이것이 내가 한 전부입니다.

if(!$(this).is(":checked")){ console.log("on"); }

-1
 $("#person_IsCurrentAddressSame").change(function ()
    {
        debugger
        if ($("#person_IsCurrentAddressSame").checked) {
            debugger

        }
        else {

        }

    })

3
코드 전용 답변은 품질이 낮은 것으로 간주됩니다. 코드의 기능과 문제 해결 방법에 대한 설명을 제공하십시오. 게시물에 더 많은 정보를 추가 할 수있는 경우 asker 및 향후 독자 모두에게 도움이됩니다. : 전체 코드 기반의 답변 설명하면서 참조 meta.stackexchange.com/questions/114762/...
borchvm을
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.