2010-06-12 9 views
11

मेरे पास उन आइटम्स की एक सूची है जिनमें उनके साथ जुड़े कुछ jQueryUI बटन हैं। एक कार्रवाई के बाद (एक आइटम को हटाने) मैं AJAX के माध्यम से सूची को फिर से लोड करना चाहता हूँ।गतिशील रूप से जोड़े गए सामग्री के लिए jQueryui बटन जोड़ना

केवल समस्या तब होती है जब मैं ऐसा करता हूं तो JQueryUI बटन अब मानक मार्कअप नहीं दिखाते हैं।

मुझे पता है कि मैं गतिशील रूप से क्लिक हैंडलर आदि जोड़ने के लिए jQuery.live() का उपयोग कर सकता हूं, लेकिन मैं उन्हें jQueryUI button() कैसे लागू करूं?

उत्तर

12

आप ajax के माध्यम से फिर से लोड करते हैं, कि context में फोन .button() (या जो भी संस्करण आप उपयोग कर रहे), इस तरह:

$.ajax({ 
    //other options.. 
    success: function(data) { 
    //insert elements 
    $(".button", data).button(); 
    } 
}); 

यह पर पर (अन्य पहले से ही पेज/डीओएम कहीं और नहीं) class="button" के साथ .button() चलाएगा।

आप वास्तव में .live() या कि यहाँ, कि घटना उत्साह से भरा हुआ पर निर्भर करता है की तरह कुछ भी उपयोग नहीं कर सकते हैं, वास्तव में कुछ भी नहीं जोड़ने/तत्वों को दूर करने के साथ क्या करना ... जब यह प्लग इन आप के खिलाफ फिर से उन्हें अमल करने की जरूरत है की जरूरत की बात आती है आपके द्वारा जोड़े गए नए तत्व।

$(".button").livequery(function() { 
    $(this).button(); 
}); 

जैसा कि मैंने हालांकि कहा, यह नहीं दुनिया में सबसे कुशल बात है, क्योंकि यह वास्तव में विभिन्न में परिवर्तन के लिए डोम पर नज़र रखता है है: या, कम कुशल लेकिन अधिक सामान्य दृष्टिकोण .livequery() plugin, इस तरह इस्तेमाल किया होगा तरीके।

+0

कूल धन्यवाद। तो संक्षिप्त जवाब यह है कि आप तब तक नहीं कर सकते जब तक कि आप लाइवक्व्यू प्लगइन का उपयोग न करें। वैसे भी इसे देख सकते हैं लेकिन मैं दक्षता के बारे में अपना मुद्दा लेता हूं अगर यह काम करता है। हालांकि संदर्भ में कॉलिंग विधियों के बारे में उपयोगी जानकारी - मुझे लगता है कि मेरी मुख्य चिंता पृष्ठ के सभी तत्वों पर पुनः चल रहा है। बटन(), जिसे आपने उत्तर दिया था। – Hippyjim

+0

इस जवाब के पक्ष में, मुझे "रीफ्रेश" के लिए ऑर्डर को रिवर्स करना था, जहां यह $ ("बटन", डेटा) है। बटन(), मुझे $ (डेटा, ".button") करना था। बटन(), बस अगर कोई और कोशिश कर रहा है और यह काम नहीं कर रहा है। – MatRichard

0

आप फिर से बाध्य कर सकते हैं के साथ ईवेंट हैंडलर:

$("#mybutton").unbind().click(function(){ ..do..something... }); 
+1

अच्छा धन्यवाद - लेकिन यह केवल ईवेंट हैंडलर नहीं है - jqueryui प्रत्येक बटन के लिए मार्कअप और अन्य चीजें जोड़ता है। अन्यथा मैं क्लिक हैंडलर के लिए बस लाइव का उपयोग कर सकता हूं। मैं संभवतः jQuery.load() के शीर्ष पर कॉलबैक जेएस का उपयोग करने से बचने की कोशिश कर रहा हूं। – Hippyjim

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

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