2014-11-22 5 views
-1

I가 나의 JS 파일에 다음과 같은 구조 :이벤트 핸들러가 다시 렌더링 HTML 후 더 이상 작동하지 않습니다

$.getJSON("data/file.json") 

.done(function(data) { 
    var loadHTMLfunction = /* some code */ 
    loadHTMLfunction(); 

    // updates display based on user filter selection 
    $("#select-section").on("change", function() { 
     $("article").find(".myClass").remove(); 
     loadHTMLfunction(); 
    }); 

    // text swap event 
    $(".summary-link").on("click", function() { 
     var el = $(this), 
     tmp = el.text(); 
     el.text(el.data("text-swap")); 
     el.data("text-swap", tmp); 
    }); 
}) 

.fail(function(jqxhr, textStatus, error) { 
    // error handling 
}); 

내 문제 내 텍스트 스왑 이벤트는 페이지가 처음로드 될 때 잘 작동하지만, 사용자가 선택 이벤트를 사용한 후에는 더 이상 작동하지 않습니다 (이 이벤트는 표시를 업데이트하기위한 선택 HTML 요소 임).

내 js 파일 구조에 문제가 있거나 내 코드 (또는 둘 다!)에 문제가 있습니까?

감사합니다.

+0

잘 모르겠지만, 내 생각 엔 당신이이기 위하여'click' 이벤트를 기대하고 있다는 것입니다 : 코드의 리팩토링 버전은 다음과 같이 표시 될 수 있습니다 아직 생성되지 않은 요소에 바인딩됩니다. 그럴 경우'click' 이벤트를 페이지로드와'loadHTMLfunction' 내부에서 실행되는 함수 안에 넣습니다. – PHPglue

+0

1) 우리가 실제로 놀고있는 DOM 요소에 대해 더 많은 정보를 제공 할 수 있고 2) 'loadHTMLfunction()'이 무엇인지 보여줄 수 있다면 아래 답변을 추가로 개선 할 수 있습니다. 이 순간부터 좋은 답변을 얻는 데 필요한 정보가 충분하지 않습니다. – Xenyal

+0

문제는 그가 click 이벤트를 한 번 ".summary-link"로 바인딩하지만 loadHTMLfunction 함수가 다시 호출되면 click 이벤트는 다시 바인딩되지 않는다는 것입니다. 내 대답 이벤트 바인딩에 배치 할 때 html을 만든 후 loadHTMLfunction에 있어야합니다. –

답변

-1

당신은 기능 loadHTMLfunction에서

// text swap event 
    $(".summary-link").on("click", function() { 
     var el = $(this), 
     tmp = el.text(); 
     el.text(el.data("text-swap")); 
     el.data("text-swap", tmp); 
    }); 

을 포함해야한다.

loadHTMLfunction = function(){ 
    //your code 
    // text swap event 
     $(".summary-link").on("click", function() { 
      var el = $(this), 
      tmp = el.text(); 
      el.text(el.data("text-swap")); 
      el.data("text-swap", tmp); 
     }); 
} 

".summary-link"요소를 제거하는 일부 작업을 수행하고 있으며 처음으로 이벤트를 바인딩합니다.

0

귀하의 기능에 커플 링이 너무 빡빡하다고 생각합니다. $.getJSON.done이되면 실제로 데이터에 변수를 할당하고 Ajax 호출 범위 밖에서 이벤트 처리기를 바인딩해야합니다. 나는 당신의`loadHTMLfunction`가 표시되지 않기 때문에,

(function() { 
    var storedData; 

    $.getJSON("data/file.json", function(data) { 
     storedData = data; 
    }); 
    .error(function(jqXHR, textStatus, errorThrown) { 
     alert("error: " + textStatus + ", Description: " + jqXHR.responsetext); 
    }); 

    var loadHTMLfunction = function() { 
     // your code 
    }; 

    loadHTMLfunction(); // You ought to tell us what this function is 
         // else we don't know if it's redundant or not 
         // to run so repetitively. 

    $("#select-section").on("change", function() { 
     $("article").find(".myClass").remove(); 
     loadHTMLfunction(); // I feel like this is an issue. 
    }); 

    $(".summary-link").on("click", function() { 
     var el = $(this), 
     tmp = el.text(); 
     el.text(el.storedData("text-swap")); 
     el.storedData("text-swap", tmp); 
    }); 
}()); 
관련 문제