2012-02-02 25 views
5

मुझे पता है कि इस प्रश्न को यहां और वाईआई साइट दोनों में कई बार पूछा गया है, लेकिन मुझे प्रत्येक समाधान के माध्यम से भी समाधान नहीं मिल रहा है। मुझे यकीन है कि मैं कुछ मौलिक रूप से गलत कर रहा हूं। तो यदि आप अभी भी इसे पढ़ रहे हैं - यहां कुछ भी नहीं है,वाईआई - jQuery रेंडर के बाद काम नहीं कर रहा है

मेरे पास एक ऐसा पृष्ठ है जिसमें चेकबॉक्स लिंक विजेट लोड हो रहा है। इसमें एक परिवर्तन() jQuery फ़ंक्शन कॉल है जो एक CGridView को रीफ्रेश करता है जो पूरी तरह से अच्छी तरह से काम करता है। मेरे पास चेकबॉक्स सूची में से प्रत्येक आइटम से संबंधित एक अवधि भी है जिसमें एक क्लिक ईवेंट है।

यह क्लिक करें घटना, बारी में एक नियंत्रक जो एक दृश्य "आंशिक रूप से renders" कहता है -

Yii::app()->clientscript->scriptMap['jquery.js'] = false; 


$this->widget('ext.xxx.EModelWidget', array(
'name' => $widget_name, 
'manufacturer_id' => $manufacturer_id, 
    ) 
); 

और इसी विजेट कोड डाटाबेस से $ डेटा लाते समय के बाद एक CheckBoxList प्रिंट करता है।

echo CHtml::checkBoxList($this->name, array(), $data, array(
     'class' => 'modelFilter', 
     'separator' => '', 
     'template' => '<div>{input} {label}</div>', 
     'id' => 'dummyID', 
    )); 

आप देख सकते हैं, मैं प्रत्येक तत्व है कि एक चेकबॉक्स के रूप में प्रदान किया जाएगा के लिए वर्ग के नाम डाल दिया है modelFilter

अब मैं सिर्फ प्रदर्शित करने के लिए मुख्य दृश्य फ़ाइल में एक स्क्रिप्ट है होना करने के लिए क्लास मॉडलफिल्टर के चेकबॉक्स पर क्लिक होने पर एक अलर्ट बॉक्स क्लिक किया जाता है।

Yii::app()->clientScript->registerScript('model-selected', " 
$('input.modelFilter').change(function(){ 
    alert('Hellpo!'); 
    }); 
"); 

लेकिन दुर्भाग्यवश, ऐसा कभी नहीं होता है।

दो आम समाधान जो मैं सभी मंचों में पढ़ा है है

क) Yii :: एप्लिकेशन() -> clientscript-> scriptMap [ 'jquery.js'] झूठी =; जो आप देख सकते हैं कि मैंने विधिवत पालन किया है।

बी) $ परिणाम और $ प्रक्रिया प्रस्तुत करने के आउटपुट पैरामीटर क्रमशः झूठी और सत्य होने के लिए।, जो कुछ भी मैंने किया है।

तो मेरा सवाल यह है कि मैं अजाक्स के माध्यम से लोड की गई सामग्री पर बदलाव समारोह प्राप्त करने के लिए क्या करना चाहिए, वाईआई में !!

+0

जहां तक ​​मैं इसे समझता हूं ... क्लिक ईवेंट भी AJAX अनुरोध को सक्रिय करता है? यदि यह मामला है तो क्या आप जांच सकते हैं कि एक jQuery जावास्क्रिप्ट प्रतिक्रिया में शामिल है या नहीं? यदि ऐसा है, तो यह आपके jQuery को पुन: प्रारंभ कर सकता है और आपके जावास्क्रिप्ट तर्क को गड़बड़ कर सकता है, हालांकि आप प्रक्रिया को आउटपुट को 'गलत' पर सेट करके अक्षम कर सकते हैं। – schmunk

उत्तर

7

यदि मैं सही ढंग से समझता हूं, तो आप चेकबॉक्स की सूची लोड करने से पहले $('input.modelFilter').change() पर कॉल कर रहे हैं। इस तरह प्रयुक्त होता है कि इवेंट हैंडलर कॉल के बाद डाले गए किसी भी तत्व से बाध्य नहीं होगा।

आपको सीधे बाध्य घटनाओं के बजाय प्रतिनिधि कार्यक्रमों का उपयोग करना होगा। पर एक नज़र डालें: http://api.jquery.com/on/ (के लिए खोज "प्रत्यक्ष और प्रत्यायोजित घटनाओं")

$("body_or_input_container").on("change", "input.modelFilter", function(e){ 
    //callback 
}); 
+0

आशाजनक लग रहा है। मुझे इस पर जांच करने और आपको वापस आने दो! उत्तर के लिए धन्यवाद !! –

+0

मैन, आप एक उद्धारकर्ता हैं! –

0

ठीक है, मुझे मिला समाधान पर, यह गलती से, आंशिक रूप से प्रस्तुत फ़ाइल के लिए, आंशिक रूप से प्रस्तुत फ़ाइल के लिए jQuery स्क्रिप्ट शामिल करना था।

मैं जानना चाहता हूं कि यह शैली सही है या नहीं।

+0

लेकिन मुझे यह बहुत अच्छा समाधान नहीं मिला है। मैं मुख्य दृश्य पृष्ठ पर मौजूद ग्रिड व्यू को भी अपडेट करने में सक्षम नहीं हूं !! :( –

4

मैं ने वही समस्या थी, के बाद मैं एक अजाक्स कॉल जो अंदर (Yii के CActiveForm द्वारा उत्पन्न ऑटो जावास्क्रिप्ट के साथ एक आंशिक प्रदान की गई एचटीएमएल लौटे प्रदर्शन किया) सबकुछ टूटा हुआ था क्योंकि अब कोई jQuery प्लगइन पहचाना नहीं गया है।

एक लंबे शोध के बाद मैंने पाया कि आंशिक jQuery jQuery को फिर से भेज रहा है और यह पहले से शुरू किए गए सभी चीज़ों को "भूलना" (विशेष रूप से अन्य प्लगइन्स, मेरे मामले में यूआई संवाद) द्वारा "पुनः भूलकर" पुनः आरंभ करता है। एकमात्र फिक्स था Yii को आंशिक रूप से jQuery.js को शामिल न करने के लिए कहें, लेकिन अन्य जेएस फ़ाइलों को शामिल करने दें।

तो इसे आंशिक की शुरुआत में रखें।

Yii::app()->clientscript->scriptMap['jquery.js'] = false; 

ध्यान दें कि आपको पृष्ठ लोड पर एक बार jQuery लोड करने के लिए कॉन्फ़िगर करना होगा।

+0

बहुत धन्यवाद, मुझे एक ही समस्या थी। डीबग करना बहुत मुश्किल था। एक अजीब ढांचा। – Magicode

0

आंख के मामले में renderPartial यह जावास्क्रिप्ट के मौजूदा वस्तु को नष्ट कर देता

जैसे

मैं अजमोद जे के सत्यापन के साथ एक रूप है यह पूरी तरह से काम करता है जब हम प्रस्तुत करना() का उपयोग लेकिन अजमोद वस्तु को नहीं पहचानता है । तो हमें अपने मामले में फिर से ऑब्जेक्ट को फिर से शुरू करने की आवश्यकता है

$ ("# form")। अजमोद();

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