2011-02-14 8 views
7

मैं नया डेटा खींच और listdatajQuery replaceWith का उपयोग DIV की सामग्री को बदलने के लिए केवल पहली बार

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

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

स्क्रिप्ट 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') से मेल खाने वाले तत्व को हटा रहे हैं, इसलिए बाद में रीफ्रेश नहीं मिल सकता है कि दस्तावेज़ में डेटा कहां रखा जाना चाहिए।

आप इस

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

मुझे लगता है कि आपने सिर पर नाखून मारा है, लेकिन यह विशेष फिक्स – Paul

+0

काम नहीं करता है, मुझे याद आया कि आपने ** प्रतिस्थापित ** ** ** ** के लिए ** प्रतिस्थापित किया होगा। उत्तम! – Paul

+0

@ सैम डुफेल मुझे एक ही समस्या है, अभी भी ताज़ा है ... – 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() प्रतिनिधि प्रतिनिधि (' # listdata a.refresh ',' cli ... ' – user113716

+0

दुर्भाग्यवश यह पहली बात है जिसे मैंने भाग्य की कोशिश नहीं की। मुझे लगता है कि सैम का जवाब सही रेखाओं के साथ है , उस ** प्रतिस्थापन के साथ ** div को हटा रहा है। दुर्भाग्यवश मैं अभी भी उत्तर के करीब नहीं हूं। – Paul

+0

@Paul मैंने अपना उत्तर –

0

आप पर href के बदलने के लिए की आवश्यकता होगी:

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

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

.refresh एंकर #listdata तत्व के अंदर हैं, तो प्रतिनिधिमंडल एक और अधिक अनुकूलित समाधान है < के लिए आपके लिंक एक href = "#" > ... </>। जब आप लिंक पर क्लिक करते हैं तो यह ब्राउज़र को रीफ्रेश करने से रोकता है।

यदि आप इस तरह से काम कर रहे हैं, तो आप बुलबुले को रोकने के लिए क्लिक हैंडलर के अंत में "वापसी झूठी" भी चिपकना चाहेंगे।

+0

ओपी एंकर को अक्षम करने के लिए preventDefault() का उपयोग करता है ... –

+0

इसके अलावा, बुलबुला कोई मुद्दा नहीं है यहाँ। –

3

तरह

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

या श्रृंखलित की तरह कुछ की कोशिश कर सकते आप replaceWith() का उपयोग कर रहे हैं, तो आप पूरी तरह एक नया तत्व के साथ #listdata बदल रहे हैं।

यदि data<div id="listdata"></div> की तरह कुछ नहीं है तो #listdatareplaceWith() के बाद गायब हो रहा है। मुझे लगता है कि आपको शायद html() का उपयोग करना चाहिए।

संबंधित मुद्दे