2012-09-10 2 views
0

요소를 클릭하면 해당 요소가 클릭되지만 다시 클릭하면 아무 것도 수행되지 않습니다. 페이지를 새로 고침하고 다시 클릭하면 다시 작동합니다. 왜?'outerHTML`에 의해 DIV가 변경된 이유가 무의미합니다

div를 클릭하면 AJAX가 PHP에 xmlhttp.send();; '클릭'이벤트는 document.getElementById('b_'+countr).addEventListener("click", selectionMade);에 의해 처리됩니다.

문서로드와 관련이 있다고 생각합니다. 변경된 사항을 outerHTML으로 변경하고 싶습니다. 전체 코드는 아래에 제공 :

// prepare clicable map 
for (x = 1; x <= 16; x++) { 
for (y = 1; y <= 16; y++) { 
    (function prepareClickableMap() { 
     var cords = x + "x" + y; 
     var el = document.getElementById(cords); 
     el.addEventListener("click", function (e) { B_modeWindow('1', cords) }); 
    })(); 
} 
} 

//passing selection 
for (countr = 1; countr <= 256; countr++) { 
    document.getElementById('b_'+countr).addEventListener("click", selectionMade); 
} 


var s; 
function selectionMade(e) { 
    selection = e.currentTarget.id.split("_"); 
    s = selection[1]; 
} 

// pass edited map info 
function B_modeWindow (id,XxY) { 
    if (s !== undefined) {  
     loading(); 

     var xmlhttp; 
     var position = XxY; 

     if (window.XMLHttpRequest) { 
      xmlhttp=new XMLHttpRequest(); 
     } else { 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

     var xy = position.split("x"); 

     xmlhttp.onreadystatechange=function() { 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
       document.getElementById(XxY).outerHTML=xmlhttp.responseText; 

       hideloading(); 
      } 
     } 

     xmlhttp.open("GET","processMapEdit.php?id="+id+"&x="+xy[0]+"&y="+xy[1]+"&s="+s,true); 
     xmlhttp.send(); 
    } 
} 

답변

0

innerHTMLouterHTML 완전히 변경되는대로 파괴하고 새로운 HTML로 대체합니다. 특히 이것은 모든 이벤트 리스너가 파손되었으므로 innerHTML/outerHTML을 사용하지 않거나 나중에 리스너를 다시 적용해야합니다.

사이드 노트 : 이벤트 리스너를지도의 모든 타일에 첨부하는 대신지도 자체에 첨부하고 event.target을 사용하여 클릭 한 타일을 찾습니다.

+0

어떻게 리스너를 다시 적용 하시겠습니까? + 어떻게 든 느린가? –

+0

'outerHTML'을 설정 한 후 이벤트 리스너를 첨부 할 코드를 추가하십시오. –

관련 문제