2012-05-22 14 views
7

पर विजेट को हटाने और पुन: लागू करने के लिए मुझे कोई समस्या है। मैं विजेट को select तत्व पर लागू कर रहा हूं। जब मैं उसी select तत्व मानों को पुनः लोड कर रहा हूं, तो मैं select तत्व पर विजेट को हटा रहा हूं और पुनः आवेदन कर रहा हूं। लेकिन एक ही तत्व पर विजेट को पुन: लागू करते समय, परिवर्तन प्रतिबिंबित नहीं होते हैं।एलिमेंट

<select id="countries" class="multiselect" multiple="multiple" name="countries"> 
     <option value="USA">United States</option> 
     ... 
</select> 

एक ही तत्व पर विजेट लागू करने के लिए:

function applyWidget(){ 
    $(".multiselect").multiselect(); 
} 

एक बार विजेट लागू किया जाता है, यह एक divclass=".ui-multiselect" साथ पैदा कर रही है

नीचे एचटीएमएल चयन बयान है। पहली बार के लिए applyWidget() विधि कॉलिंग ठीक काम कर रहा है

function removeWidget(){ 
    $(".ui-multiselect").remove(); 
} 

:

विजेट वर्ग को निकालने के लिए। दूसरी बार कॉल करना काम नहीं कर रहा है। मैं तत्व पर विजेट कैसे पुनः लोड करूं?

उत्तर

2

आपको विजेट को नष्ट करना होगा या यह पुनर्विचार नहीं करेगा।

function removeWidget() { 
    $(".ui-multiselect").multiselect("destroy"); 
    $(".ui-multiselect").multiselect(); 
} 
+0

यह काम नहीं करेगा, क्योंकि बहुउद्देश्यीय विजेट 'multiselect' से जुड़ा हुआ है, न कि' .ui-multiselect' – saluce

9

पहले, अपने विजेट एक destroy विधि उपलब्ध की जरूरत है, और आप कैसे करना है कि आप jQueryUI 1.8 का उपयोग कर रहे हैं, इस पर और नीचे या jQueryUI 1.9 और इसके बाद के संस्करण निर्भर करता है।

इन उदाहरणों के लिए, मैं इस धारणा है कि आप निम्न कोड के साथ एकाधिक चयन करें div संदर्भित कर रहे हैं बना रही हूँ:

_create: function() { 
    this.multiselect = $("<div>").addClass("ui-multiselect")... 
} 

आप jQuery 1.8 का उपयोग कर रहे हैं, तो अपने विजेट destroy परिभाषित करना चाहिए:

destroy: function() 
{ 
    this.multiselect.remove(); 
    $.Widget.prototype.destroy.call(this); 
} 

अन्यथा, jQuery 1.9+ के तहत, आप _destroy परिभाषित करने की जरूरत:

_destroy: function() 
{ 
    this.multiselect.remove(); 
} 

ध्यान दें कि आप jQueryUI के अपने संस्करण के आधार पर केवल दो उपरोक्त तरीकों में से एक को शामिल करते हैं, और यह कि 1.9 संस्करण अंडरस्कोर _ द्वारा पूर्ववर्ती है। JQueryUI 1.9 के तहत, अंडरस्कोर के बिना नष्ट परिभाषित न करें, क्योंकि विजेट फैक्ट्री उस विधि को परिभाषित करती है और आप विधि को ओवरराइट (और ब्रेक) करेंगे।

एक बार यह पूरा होने के बाद, आपको अपना कोड बदलना होगा ताकि आप इसे पुन: प्रयास करने से पहले विजेट को "नष्ट" कर सकें।

function removeWidget(){ 
    $(".multiselect").multiselect("destroy"); 
} 
संबंधित मुद्दे