Programing

입력 유형 =“number”에 대한 onchange 이벤트

crosscheck 2020. 10. 23. 07:34
반응형

입력 유형 =“number”에 대한 onchange 이벤트


onchange를 <input type="number" id="n" value="5" step=".5" />어떻게 처리 할 수 있습니까? 나는 할 수 없습니다 keyup또는 keydown사용자가 단지 값을 변경하려면 화살표를 사용할 수 있기 때문에. 나는 .change()이벤트가 그렇다고 생각하는 블러뿐만 아니라 변경 될 때마다 처리하고 싶습니다 . 어떤 아이디어?


mouseup 및 keyup 사용

$(":input").bind('keyup mouseup', function () {
    alert("changed");            
});

http://jsfiddle.net/XezmB/2/


oninput이벤트는 ( .bind('input', fn)) 클릭 및 키보드 / 마우스 페이스트, 화살표 키 입력에서 변경 사항을 포함하지만, <9 IE에서 지원되지 않습니다.

jQuery(function($) {
  $('#mirror').text($('#alice').val());

  $('#alice').on('input', function() {
    $('#mirror').text($('#alice').val());
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input id="alice" type="number" step="any" value="99">

<p id="mirror"></p>


http://jsfiddle.net/XezmB/8/

$(":input").bind('keyup change click', function (e) {
    if (! $(this).data("previousValue") || 
           $(this).data("previousValue") != $(this).val()
       )
   {
        console.log("changed");           
        $(this).data("previousValue", $(this).val());
   }

});


$(":input").each(function () {
    $(this).data("previousValue", $(this).val());
});​

이것은 약간의 빈민가이지만, 이렇게하면 "클릭"이벤트를 사용하여 입력의 작은 화살표를 통해 마우스를 사용하여 증가 / 감소 할 때 실행되는 이벤트를 캡처 할 수 있습니다. 값이 실제로 변경되지 않는 한 (필드에서 간단한 클릭으로 인한 오탐을 방지하기 위해) 논리가 실행되지 않도록하는 간단한 수동 "변경 확인"루틴을 구축 한 방법을 볼 수 있습니다.


마우스 또는 키를 눌렀을 때 감지하려면 다음과 같이 작성할 수도 있습니다.

$(document).on('keyup mouseup', '#your-id', function() {                                                                                                                     
  console.log('changed');
});

$(':input').bind('click keyup', function(){
    // do stuff
});

데모 : http://jsfiddle.net/X8cV3/


$("input[type='number']")IE에서 작동하지 않기 때문에 클래스 이름 또는 ID를 사용해야합니다 (예 : $('.input_quantity').

그리고 .bind()방법을 사용하지 마십시오 . .on()메서드는 문서에 이벤트 처리기를 연결하는 데 선호되는 방법입니다.

그래서 내 버전은 다음과 같습니다.

HTML

<input type="number" value="5" step=".5" min="1" max="999" id="txt_quantity" name="txt_quantity" class="input_quantity">

jQuery

<script>
$(document).ready(function(){
    $('.input_quantity').on('change keyup', function() {
        console.log('nice');
    }); 
});
</script>

더 나은 해결책이있을 수 있지만 이것이 마음에 떠오른 것입니다.

var value = $("#yourInput").val();
$("#yourInput").on('keyup change click', function () {
    if(this.value !== value) {
        value = this.value;
        //Do stuff
    }        
});

다음은 작동하는 예 입니다.

단순히 이벤트 핸들러를 keyup, changeclick이벤트에 바인딩 합니다. 값이 변경되었는지 여부를 확인하고 변경된 경우 현재 값을 저장하여 다음 번에 다시 확인할 수 있습니다. click이벤트 를 처리하려면 확인이 필요합니다 .


$("input[type='number']").bind("focus", function() {
    var value = $(this).val();
    $(this).bind("blur", function() {
        if(value != $(this).val()) {
            alert("Value changed");
        }
        $(this).unbind("blur");
    });
});

또는

$("input[type='number']").bind("input", function() {
    alert("Value changed");
});

<input type="number" id="n" value="0" step=".5" />
<input type="hidden" id="v" value = "0"/>

<script>
$("#n").bind('keyup mouseup', function () {
    var current = $("#n").val();
    var prevData = $("#v").val(); 
    if(current > prevData || current < prevData){
       $("#v").val(current);
       var newv = $("#v").val(); 
       alert(newv);
    } 
});  
</script>

http://jsfiddle.net/patrickrobles53/s10wLjL3/

다음 변경시 비교에 필요한 이전 값의 컨테이너로 숨겨진 입력 유형을 사용했습니다.


나는 같은 문제가 있었고이 코드를 사용하여 해결했습니다.

HTML

<span id="current"></span><br>
<input type="number" id="n" value="5" step=".5" />

첫 번째 줄 3 개만 추가 할 수 있으며 나머지 부분은 선택 사항입니다.

$('#n').on('change paste', function () {
    $("#current").html($(this).val())   
});
// here when click on spinner to change value, call trigger change
$(".input-group-btn-vertical").click(function () {
   $("#n").trigger("change");
});
// you can use this to block characters non numeric
$("#n").keydown(function (e) {
    // Allow: backspace, delete, tab, escape, enter and .
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 || (e.keyCode === 65 && e.ctrlKey === true) || (e.keyCode >= 35 && e.keyCode <= 40)) 
           return;

    if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) 
       e.preventDefault();
});

여기 예 : http://jsfiddle.net/XezmB/1303/

참고URL : https://stackoverflow.com/questions/9609731/onchange-event-for-input-type-number

반응형