복붙노트

[JQUERY] jQuery : unbind 이벤트 핸들러가 나중에 다시 묶을 수 없습니다.

JQUERY

jQuery : unbind 이벤트 핸들러가 나중에 다시 묶을 수 없습니다.

해결법


  1. 1.항목의 데이터에 이벤트 요소가 있습니다. 이 작업을 수행해야합니다. 끄기 전에 요소를 읽고 핸들러를 배열에 저장할 수 있습니다. 더 많은 도움이 필요하면 의견을 말하십시오. 이 아이디어가 $ .fn.clone 메소드를 읽지 않으므로 봐도됩니다.

    항목의 데이터에 이벤트 요소가 있습니다. 이 작업을 수행해야합니다. 끄기 전에 요소를 읽고 핸들러를 배열에 저장할 수 있습니다. 더 많은 도움이 필요하면 의견을 말하십시오. 이 아이디어가 $ .fn.clone 메소드를 읽지 않으므로 봐도됩니다.

    $(document).ready(function() {
        $('#test').click(function(e) {
            alert('test');
            var events = $('#test').data("events");
            $('#test').unbind('click', events.click[0]);
        });
    });
    
    <a id="test">test</a>
    

  2. 2.이를 달성하는 방법은 선택할 수있는 상점 및 수정 방법을 제공합니다. StoreEvents가 호출되는 순간에 이벤트의 스냅 샷을 취합니다. RestoreeEvents는 마지막으로 이전 스냅 샷을 복원합니다. 복원하는 동안 바인딩을 매개 변수화하는 데 조금 뒤틀어 져야 할 수도 있습니다. 마지막 스냅 샷 후에 바인딩 된 이벤트를 유지하고 싶습니다.

    이를 달성하는 방법은 선택할 수있는 상점 및 수정 방법을 제공합니다. StoreEvents가 호출되는 순간에 이벤트의 스냅 샷을 취합니다. RestoreeEvents는 마지막으로 이전 스냅 샷을 복원합니다. 복원하는 동안 바인딩을 매개 변수화하는 데 조금 뒤틀어 져야 할 수도 있습니다. 마지막 스냅 샷 후에 바인딩 된 이벤트를 유지하고 싶습니다.

    (function($){
    
        function obj_copy(obj){
                var out = {};
            for (i in obj) {
                if (typeof obj[i] == 'object') {
                    out[i] = this.copy(obj[i]);
                }
                else
                    out[i] = obj[i];
            }
            return out;
        }
    
    
        $.fn.extend({
    
            storeEvents:function(){
                this.each(function(){
                    $.data(this,'storedEvents',obj_copy($(this).data('events')));
                });
                return this;
            },
    
            restoreEvents:function(){
                this.each(function(){
                    var events = $.data(this,'storedEvents');
                    if (events){
                        $(this).unbind();
                        for (var type in events){
                            for (var handler in events[type]){
                                $.event.add(
                                    this, 
                                    type, 
                                    events[type][handler], 
                                    events[type][handler].data);
                            }
                        }
                    }
                });
                return this;
            }
    
        });
    })(jQuery);
    

  3. 3.jQuery 1.4.2+가 이벤트 핸들러가 저장되는 방법을 변경하기 때문에 관련이 있습니다.

    jQuery 1.4.2+가 이벤트 핸들러가 저장되는 방법을 변경하기 때문에 관련이 있습니다.

    내가 발견 한 가장 좋은 방법은 이벤트 네임 스페이스를 사용하는 것이 었습니다.

    var ary_handlers = [ fn_highlight, fn_onpress, fn_cleanup ];
    for ( idx = 0; idx < ary_handlers.length; idx++ ){
      $('#test').bind('click.foobar',ary_handlers[idx]);
    }
    
    // and then later: 
    $('#test').unbind('.foobar');  
    

    위의 예에서 모든 foobar 사건은 언 바운드입니다. 미세한 곡물 컨트롤이 필요하면 각 클릭 핸들러의 이름을 지정하고 핸들러 배열과 상관 관계를 유지할 수 있습니다.

    var ary_handlers = [ fn_highlight, fn_onpress, fn_cleanup ];
    for ( idx = 0; idx < ary_handlers.length; idx++ ){
      $('#test').bind('click.ns_' + String(idx), ary_handlers[idx]);
    }
    
    // and then later you could pick off a specific one to unbind
    $('#test').unbind('.ns_2');
    

  4. 4.복사 이벤트라는 jQuery 플러그인이 있습니다.이 사물은 한 개체에서 다른 개체로 이벤트를 복사합니다. 이것은 하나의 요소에서 "저장"이벤트를 "저장"하고 나중에 다시 가져올 수 있습니다. 한 번 더 옵션 :)

    복사 이벤트라는 jQuery 플러그인이 있습니다.이 사물은 한 개체에서 다른 개체로 이벤트를 복사합니다. 이것은 하나의 요소에서 "저장"이벤트를 "저장"하고 나중에 다시 가져올 수 있습니다. 한 번 더 옵션 :)

    편집 : 고정 된 링크를 고정했습니다


  5. 5.이벤트 핸들러를 해제하려면 핸들러 함수를 unbind ()로 전달해야합니다. 그래서 이미 핸들러 기능이 있으므로, 당신이해야 할 일은 모두 기억하는 것입니다.

    이벤트 핸들러를 해제하려면 핸들러 함수를 unbind ()로 전달해야합니다. 그래서 이미 핸들러 기능이 있으므로, 당신이해야 할 일은 모두 기억하는 것입니다.


  6. 6.event.Handler 매개 변수를 사용할 수 있습니다.

    event.Handler 매개 변수를 사용할 수 있습니다.

    $(document).ready(function() {
        $('#test').click(function(e) {
            e.preventDefault();
            alert('test');
            $('#test').unbind('click', e.handler);
            //Do Something...
            $('#test').click();
        });
    });
    
    <a id="test">test</a>
    

    event.Handler 이벤트를 수신 한 현재 핸들러를 반환하므로 다른 핸들러를 유지할 수 있습니다.


  7. 7.Nick Curaver는 jQuery 1.4.2+에 대한 정답을 갖는 것으로 보입니다. 그는 또한 유용한 바이올린을 포함합니다. 그의 솔루션을 사용하면 jQuery 요소에 첨부 된 모든 이벤트 핸들러를 검색하고 첨부 된 핸들러를 파악할 수 있습니다.

    Nick Curaver는 jQuery 1.4.2+에 대한 정답을 갖는 것으로 보입니다. 그는 또한 유용한 바이올린을 포함합니다. 그의 솔루션을 사용하면 jQuery 요소에 첨부 된 모든 이벤트 핸들러를 검색하고 첨부 된 핸들러를 파악할 수 있습니다.

  8. from https://stackoverflow.com/questions/516265/jquery-unbind-event-handlers-to-bind-them-again-later by cc-by-sa and MIT license