복붙노트

[JQUERY] (즉시)을 사용하여 JQuery와 <input 타입 = "텍스트">에서의 모든 변경을 감지

JQUERY

(즉시)을 사용하여 JQuery와 에서의 모든 변경을 감지

해결법


  1. 1.이 jQuery 코드는 모든 요소에 즉시 변화를 포착하고, 모든 브라우저에서 작동합니다 :

    이 jQuery 코드는 모든 요소에 즉시 변화를 포착하고, 모든 브라우저에서 작동합니다 :

     $('.myElements').each(function() {
       var elem = $(this);
    
       // Save current value of element
       elem.data('oldVal', elem.val());
    
       // Look for changes in the value
       elem.bind("propertychange change click keyup input paste", function(event){
          // If value has changed...
          if (elem.data('oldVal') != elem.val()) {
           // Updated stored value
           elem.data('oldVal', elem.val());
    
           // Do action
           ....
         }
       });
     });
    

  2. 2.> = 1.9 jQuery를위한 실시간 멋진 솔루션

    > = 1.9 jQuery를위한 실시간 멋진 솔루션

    $("#input-id").on("change keyup paste", function(){
        dosomething();
    })
    

    당신은 또한 감지 할 경우, 이벤트를 그냥 "클릭"

    $("#input-id").on("change keyup paste click", function(){
        dosomething();
    })
    

    당신이 <= 1.4 jQuery를 사용하는 경우, 단지 대신에의 라이브 사용합니다.


  3. 3.불행하게도, 나는 setInterval을이 상을 수상 생각 :

    불행하게도, 나는 setInterval을이 상을 수상 생각 :

    <input type=text id=input_id />
    <script>
    setInterval(function() { ObserveInputValue($('#input_id').val()); }, 100);
    </script>
    

    그것은 코드의 한 라인에서 가장 깨끗한 솔루션입니다. 당신이 입력 값을 얻을 수있는 모든 다른 이벤트 / 방법에 대해 걱정할 필요가 없기 때문에 그것은 또한 가장 강력한입니다.

    '하여 setInterval'를 사용하는 단점이 경우에는 적용하지 않는 것 :


  4. 4.oninput 이벤트에 바인딩 가장 제정신 브라우저에서 잘 작동 보인다. IE9도를 지원하지만 구현은 버그 (문자를 삭제할 때 이벤트가 발생하지 않음)입니다.

    oninput 이벤트에 바인딩 가장 제정신 브라우저에서 잘 작동 보인다. IE9도를 지원하지만 구현은 버그 (문자를 삭제할 때 이벤트가 발생하지 않음)입니다.

    jQuery를 버전 1.7+ 방법에 대한이 같은 이벤트에 바인드에 유용합니다 :

    $(".inputElement").on("input", null, null, callbackFunction);
    

  5. 5.2017 대답 : 입력 이벤트가 IE8보다 최신 아무것도 정확히이 일을합니다.

    2017 대답 : 입력 이벤트가 IE8보다 최신 아무것도 정확히이 일을합니다.

    $(el).on('input', callback)
    

  6. 6.불행하게도 어떤 이벤트 나 당신의 기준과 일치하는 이벤트 세트가 없습니다. 키 누름과 두 KeyUp 이벤트로 처리 할 수 ​​있습니다 복사 / 붙여 넣기. JS를 통해 변경이 까다 있습니다. 당신은 텍스트 상자가, 가장 좋은 건 직접 함수를 호출하거나 텍스트 상자에 사용자 이벤트를 트리거하기 위해 수정하는 설정하는 코드를 제어 할 수있는 경우 :

    불행하게도 어떤 이벤트 나 당신의 기준과 일치하는 이벤트 세트가 없습니다. 키 누름과 두 KeyUp 이벤트로 처리 할 수 ​​있습니다 복사 / 붙여 넣기. JS를 통해 변경이 까다 있습니다. 당신은 텍스트 상자가, 가장 좋은 건 직접 함수를 호출하거나 텍스트 상자에 사용자 이벤트를 트리거하기 위해 수정하는 설정하는 코드를 제어 할 수있는 경우 :

    // Compare the textbox's current and last value.  Report a change to the console.
    function watchTextbox() {
      var txtInput = $('#txtInput');
      var lastValue = txtInput.data('lastValue');
      var currentValue = txtInput.val();
      if (lastValue != currentValue) {
        console.log('Value changed from ' + lastValue + ' to ' + currentValue);
        txtInput.data('lastValue', currentValue);
      }
    }
    
    // Record the initial value of the textbox.
    $('#txtInput').data('lastValue', $('#txtInput').val());
    
    // Bind to the keypress and user-defined set event.
    $('#txtInput').bind('keypress set', null, watchTextbox);
    
    // Example of JS code triggering the user event
    $('#btnSetText').click(function (ev) {
      $('#txtInput').val('abc def').trigger('set');
    });
    

    당신이 그 코드를 제어 할 수없는 경우, 당신은 변화에 대한 텍스트 상자 '시계'로하여 setInterval ()을 사용할 수 있습니다 :

    // Check the textbox every 100 milliseconds.  This seems to be pretty responsive.
    setInterval(watchTextbox, 100);
    

    활성 모니터링 이런 종류의 '즉시'업데이트를 잡을 것이다, 그러나 충분히 빨리 더인지 지연이없는 것 같다. DrLouie 댓글에서 지적 당신이 입력을 많이보고해야하는 경우,이 솔루션은 아마 잘 확장되지 않습니다. 당신은 항상 더 또는 덜 자주 확인하여 setInterval ()의 두번째 매개 변수를 조정할 수 있습니다.


  7. 7.당신이 다른 답변의 공상하지 않은 경우 여기에 약간 다른 솔루션입니다 :

    당신이 다른 답변의 공상하지 않은 경우 여기에 약간 다른 솔루션입니다 :

    var field_selectors = ["#a", "#b"];
    setInterval(function() { 
      $.each(field_selectors, function() { 
        var input = $(this);
        var old = input.attr("data-old-value");
        var current = input.val();
        if (old !== current) { 
          if (typeof old != 'undefined') { 
            ... your code ...
          }
          input.attr("data-old-value", current);
        }   
      }   
    }, 500);
    

    당신이 캡처 컨텍스트 메뉴의 붙여 넣기를 클릭하고의 keyup에 의존 할 수 있음을 고려하십시오.


  8. 8.이 코드 어딘가에 추가,이 트릭을 할 것입니다.

    이 코드 어딘가에 추가,이 트릭을 할 것입니다.

    var originalVal = $.fn.val;
    $.fn.val = function(){
        var result =originalVal.apply(this,arguments);
        if(arguments.length>0)
            $(this).change(); // OR with custom event $(this).trigger('value-changed');
        return result;
    };
    

    하지 않는 트리거 변경 () jQuery를에서) (발에이 솔루션을 찾을 수


  9. 9.나는 샘플을 만들었습니다. 그것은 당신을 위해 작동 할 수 있습니다.

    나는 샘플을 만들었습니다. 그것은 당신을 위해 작동 할 수 있습니다.

    var typingTimer;
    var doneTypingInterval = 10;
    var finaldoneTypingInterval = 500;
    
    var oldData = $("p.content").html();
    $('#tyingBox').keydown(function () {
        clearTimeout(typingTimer);
        if ($('#tyingBox').val) {
            typingTimer = setTimeout(function () {
                $("p.content").html('Typing...');
            }, doneTypingInterval);
        }
    });
    
    $('#tyingBox').keyup(function () {
        clearTimeout(typingTimer);
        typingTimer = setTimeout(function () {
            $("p.content").html(oldData);
        }, finaldoneTypingInterval);
    });
    
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    
    
    <textarea id="tyingBox" tabindex="1" placeholder="Enter Message"></textarea>
    <p class="content">Text will be replace here and after Stop typing it will get back</p>
    

    http://jsfiddle.net/utbh575s/


  10. 10.우리는 실제로 자바 스크립트 변화를 감지하기위한 설정 루프에 필요하지 않습니다. 우리는 이미 우리가 감지 할 요소에 많은 이벤트 리스너를 설정. 바로 일을 할 것입니다 어떤 않은 유해 이벤트를 트리거.

    우리는 실제로 자바 스크립트 변화를 감지하기위한 설정 루프에 필요하지 않습니다. 우리는 이미 우리가 감지 할 요소에 많은 이벤트 리스너를 설정. 바로 일을 할 것입니다 어떤 않은 유해 이벤트를 트리거.

    $("input[name='test-element']").on("propertychange change click keyup input paste blur", function(){
    console.log("yeh thats worked!");
    });
    
    $("input[name='test-element']").val("test").trigger("blur");
    

    이에만 사용할 수 있습니다 OFC 당신은 당신의 프로젝트에 자바 스크립트 변경에 대한 모든 권한이있는 경우.


  11. 11.음, 가장 좋은 방법은 직접 열거 된 세 개의 기지를 커버하는 것입니다. 간단한 : 위해 onblur는 : onKeyUp에, 등, 그래서 그냥 그들을 결합, 당신이 원하는 것을 위해 작동하지 않습니다.

    음, 가장 좋은 방법은 직접 열거 된 세 개의 기지를 커버하는 것입니다. 간단한 : 위해 onblur는 : onKeyUp에, 등, 그래서 그냥 그들을 결합, 당신이 원하는 것을 위해 작동하지 않습니다.

    그래서 그냥 수정을하는 함수에서 콜백을 추가의 keyup 처음 두 커버해야하고, 자바 스크립트가 입력 상자를 수정하는 경우, 물론 나는 확실히 당신의 자신의 자바 스크립트를 바랍니다.


  12. 12.이 질문에 10 년 전에 게시되었지만, 나는 여전히 개선이 필요하다고 생각합니다. 그래서 여기 내 솔루션입니다.

    이 질문에 10 년 전에 게시되었지만, 나는 여전히 개선이 필요하다고 생각합니다. 그래서 여기 내 솔루션입니다.

    $(document).on('propertychange change click keyup input paste', 'selector', function (e) {
        // Do something here
    });
    

    이 솔루션을 가진 유일한 문제는 값이 $ ( '선택')와 같은 자바 스크립트에서 변경하는 경우는하지 않습니다 트리거입니다. 발 ( '일부 값'). 당신이 자바 스크립트에서 값을 변경할 때 당신은 당신의 선택에 어떤 이벤트가 발생 할 수 있습니다.

    $(selector).val('some value');
    // fire event
    $(selector).trigger('change');
    

  13. 13.NO JQUERY! (그것 어쨌든 요즘 오래된 벽돌 쌓는)

    NO JQUERY! (그것 어쨌든 요즘 오래된 벽돌 쌓는)

    여기에 이벤트 리스너를 사용하여 비 ASCII 검출기이다

    경우 "입력"을 사용하면 변화의 어떤 종류도 찾아보실 수 있습니다 :

    삭제, 백 스페이스, 붙여 넣기, 입력하면, 입력 값을 변경합니다 아무것도.

    입력 이벤트는 직접 텍스트 입력의 세터 관련이있다. 텍스트가 어떤 방식으로 변경 될 때마다, 입력이 전달됩니다.

    document.querySelector ( "# testInput") 또는 addEventListener ( "입력"시험).; document.querySelector ( "# 1 testInputLocked") 또는 addEventListener ( "입력"을 testLocked).; 기능 테스트 (E) { VAR document.getElementById를 A = ( '출력'); 경우 (e.target.value == ''|| / ^ [- ~]. + $ / 테스트 (e.target.value)) { a.innerText = "ASCII : 사실"; } 다른 경우 (/ ^! [- ~]. + $ / 테스트 (e.target.value)) { a.innerText = "ASCII : 거짓"; } } testLocked 함수 (E) { e.target.value = e.target.value.replace (/ [^ - ~] + / g ''); } 입력에서 Alt + NumPad2 + NumPad3를 눌러보십시오, 그것은 바로, 당신이 붙여 넣기 여부, 유형, 또는 다른 방법을 변화를 감지, 오히려 당신이 변화를 감지하기위한 텍스트 상자의 선택을 취소하기 위해 기다리는 것보다. 로

    <입력 ID = "testInput"> ASCII : 사실 를 로

    모든 비 ASCII를 ASCII로 잠그고 교체를 원하십니까? 로


  14. 14.여기에 내가 자동 완성 변화 채우는 jqueryui 선택 (목록)를 구현하기 위해 사용하고있는 잘 동작하는 예제입니다,하지만 난 정확히 jqueryui 자동 완성 드롭 다운 메뉴를 수행하는 등의 기능을 원하지 않는다.

    여기에 내가 자동 완성 변화 채우는 jqueryui 선택 (목록)를 구현하기 위해 사용하고있는 잘 동작하는 예제입니다,하지만 난 정확히 jqueryui 자동 완성 드롭 다운 메뉴를 수행하는 등의 기능을 원하지 않는다.

    $("#tagFilter").on("change keyup paste", function() {
         var filterText = $("#tagFilter").val();
        $("#tags").empty();
        $.getJSON("http://localhost/cgi-bin/tags.php?term=" + filterText,
            function(data) {
                var i;
                for (i = 0; i < data.length; i++) {
                    var tag = data[i].value;
                    $("#tags").append("<li class=\"tag\">" + tag + "</li>");
                }
            }); 
    });
    

  15. 15.당신은 단순히이 같은 형태의 모든 체인저를 식별 할 수 있습니다

    당신은 단순히이 같은 형태의 모든 체인저를 식별 할 수 있습니다

               //when form change, show aleart
                $("#FormId").change(function () {
                    aleart('Done some change on form');
                }); 
    

  16. 16.당신은 단지 <입력 유형 = "텍스트"> 대신에 <스팬의 contentEditable = "true"로 맞춤법 검사 = "거짓"> 요소를 사용할 수 없습니다?

    당신은 단지 <입력 유형 = "텍스트"> 대신에 <스팬의 contentEditable = "true"로 맞춤법 검사 = "거짓"> 요소를 사용할 수 없습니다?

    주된 이유에 의해 특색있는 (의 contentEditable = "true"를 속성으로서 맞춤법 = "거짓"으로)

    당신이 이벤트를 얻을 수 innerText와 같은 값을 쓰는 반면에 당신이 할 수있는 외관 물론, CSS에서 스타일을, 달성하기 :

    여기에 바이올린입니다.

    불행하게도 실제로 내가 찾을 수있어 IE와 에지에서 작동하지 않는 무언가가있다.


  17. 17.당신은 <입력 유형 = "텍스트">에 '입력'이벤트를 바인딩 할 수 있습니다. 이것은 입력이 복사, 붙여 넣기 키 입력 등과 같은 변화 할 때마다 트리거된다.

    당신은 <입력 유형 = "텍스트">에 '입력'이벤트를 바인딩 할 수 있습니다. 이것은 입력이 복사, 붙여 넣기 키 입력 등과 같은 변화 할 때마다 트리거된다.

    $("#input-id").on("input", function(){
        // Your action
    })
    

  18. 18.이 예제를 확인하고 이벤트입니다 선택할 수 있습니다 관심있는 :

    이 예제를 확인하고 이벤트입니다 선택할 수 있습니다 관심있는 :

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <title>evetns</title>
    </head>
    <body>
    <form>
        <input class="controlevents" id="i1" type="text" /><br />
        <input class="controlevents" id="i2" type="text" /><br />
        <input class="controlevents" id="i3" type="text" /><br />
        <input class="controlevents" id="i4" type="text" /><br />
        <input class="controlevents" id="i5" type="text" /><br />
    </form>
    <div id="datatext"></div>
    </body>
    </html>
    <script>
    $(function(){
    
    function testingevent(ev){
        if (ev.currentTarget.tagName=="INPUT")
            $("#datatext").append("<div>id : " + ev.currentTarget.id + ", tag: " + ev.currentTarget.tagName + ", type: "+ ev.type +"</div>");
    }   
    
        var eventlist = ["resizeend","rowenter","dragleave","beforepaste","dragover","beforecopy","page","beforeactivate","beforeeditfocus","controlselect","blur",
                        "beforedeactivate","keydown","dragstart","scroll","propertychange","dragenter","rowsinserted","mouseup","contextmenu","beforeupdate",
                        "readystatechange","mouseenter","resize","copy","selectstart","move","dragend","rowexit","activate","focus","focusin","mouseover","cut",
                        "mousemove","focusout","filterchange","drop","blclick","rowsdelete","keypress","losecapture","deactivate","datasetchanged","dataavailable",
                        "afterupdate","mousewheel","keyup","movestart","mouseout","moveend","cellchange","layoutcomplete","help","errorupdate","mousedown","paste",
                        "mouseleave","click","drag","resizestart","datasetcomplete","beforecut","change","error","abort","load","select"];
    
        var inputs = $(".controlevents");
    
        $.each(eventlist, function(i, el){
            inputs.bind(el, testingevent);
        });
    
    });
    </script>
    

  19. 19.여기 파티에 늦을 수 있지만 당신은 jQuery를 제공하는 .change () 이벤트를 사용할 수 없습니다.

    여기 파티에 늦을 수 있지만 당신은 jQuery를 제공하는 .change () 이벤트를 사용할 수 없습니다.

    당신이 뭔가를 할 수있을 것입니다 ...

    $(#CONTROLID).change(function(){
        do your stuff here ...
    });
    

    당신은 항상 같은과 컨트롤 목록에 바인딩 할 수 ...

    var flds = $("input, textarea", window.document);
    
    flds.live('change keyup', function() {
        do your code here ...
    });
    

    현재와 ​​미래의 페이지에있는 모든 요소를 ​​처리하는 라이브 바인더 보장합니다.


  20. 20.이 것을 할 수있는 가장 빠른 및 청소 방법입니다 :

    이 것을 할 수있는 가장 빠른 및 청소 방법입니다 :

    내가 jQuery를 사용하고 ->

    $('selector').on('change', function () {
        console.log(this.id+": "+ this.value);
    });
    

    그것은 나를 위해 꽤 잘 작동합니다.

  21. from https://stackoverflow.com/questions/1948332/detect-all-changes-to-a-input-type-text-immediately-using-jquery by cc-by-sa and MIT license