2011-02-14 2 views
7
내가 새로운 데이터를 끌어와

는 처음

$(function(){ 
$('.refresh').click(function(event) { 
    event.preventDefault(); 

    $.ajax({ 
     url: "_js/data.php", 
     success: function(results){ 
      $('#listdata').replaceWith(results); 
     } 
    }); 
}); 
}); 

스크립트에 listData DIV에의 내용을 교체하려면 다음 jQuery를 사용하고

작업하는 온 수많은 링크에 의해 트리거됩니다 다음과 같은 페이지 :

<a href="" id="update1" class="refresh">Update 1</a> 
<a href="" id="update2" class="refresh">Update 2</a> 

어떤 이유로 스크립트는 링크의 첫 번째 클릭에서만 작동합니다. 이후 클릭은 데이터를 새로 고치지 않습니다.

나는 여러 가지 수정 사항을 보았지만 아무 것도 얻을 수 없었다. 어떤 제안?

+0

라이브 호? ... –

답변

27

귀하의 문제는 replaceWith을 사용하고있는 것처럼 보입니다.

replaceWith의 첫 번째 호출에서 $('#listdata')과 일치하는 요소를 제거하므로 이후의 새로 고침으로 인해 데이터가 문서에 배치되어야하는 위치를 찾을 수 없습니다. 당신이 replaceWith()를 사용하는 경우

당신은 당신은 완전히 새로운 요소와 #listdata을 대체하고,이

$('#listdata').empty().append(results); 
+0

네가 머리에 못을 박은 것 같아.하지만이 특별한 문제가 해결되지 않아. – Paul

+0

죄송합니다. ** replaceWith **를 ** append **로 바꿨다. 완전한! – Paul

+0

@Sam Dufel 나는 여전히 같은 문제가 있는데, 새로 고침 ... – EBM

0

시도 :

var list = $('#listdata'); 

list.delegate('a.refresh', 'click', function(e) { 
    e.preventDefault(); 

    $.ajax({ 
     url: '_js/data.php', 
     success: function(data) { 
      list.empty().html(data); 
     } 
    }); 
}); 
+0

'.delegate()'솔루션을 사용하면'# listdata' 요소 자체를 대체하므로'.delegate()'핸들러를 잃을 것입니다. 편집 : 당신은 할 수있는'list.parent(). delegate ('# listdata a.refresh', 'cli ...' – user113716

+0

불행히도 이것은 내가 행운을 찾지 못한 첫 번째 일이다. 나는 샘의 답이 맞은 줄을 따라 있다고 생각한다. ** replaceWith **가 div를 제거하고 있습니다. 불행히도 아직 답변에 더 가깝습니다. – Paul

+0

@Paul 내 대답 –

0

당신은에 HREF의를 변경해야합니다 다음 .refresh 앵커가 #listdata 요소 내부에있는 경우

$('a.refresh').live('click', function(e) { 
    e.preventDefault(); 

    $.ajax({ 
     url: '_js/data.php', 
     success: function(data) { 
      $('#listdata').empty().html(data); 
     } 
    }); 
}); 

, 다음 대표단은 더욱 최적화 된 솔루션입니다 < a href = "#"> ... </a > 링크를 클릭하십시오. 이렇게하면 링크를 클릭 할 때 브라우저가 새로 고쳐지지 않습니다.

이런 식으로 작업하는 경우 버블 링을 방지하기 위해 클릭 핸들러의 끝에 'return false'를 사용하는 것이 좋습니다.

+0

OP는 preventDefault()를 사용하여 앵커를 비활성화합니다. –

+0

또한 버블 링은 문제가되지 않습니다. 이리. –

3

처럼

$('#listdata').empty(); 
$('#listdata').append(results); 

또는 체인 같은 것을 시도 할 수 있습니다.

data<div id="listdata"></div>이 아닌 경우 은 replaceWith() 이후로 사라집니다. 아마도 html()을 사용해야한다고 생각합니다.