Yii - jQuery funktioniert nicht nach renderPartial
Ich weiß, diese Frage wurde gebeten, zahlreiche Anzahl der Male, sowohl hier als auch in der Yii-Website, aber ich bin nicht immer die Lösung, auch nach Durchlaufen der jeweiligen Lösung. Ich bin sicher, ich mache etwas grundlegend falsch. Also, wenn Sie immer noch der Lektüre dieses - hier geht nichts mehr,
Ich habe eine Seite, die hat ein CheckBoxList-widget geladen wird. Es hat ein change() jQuery function call aktualisiert, ein CGridView, die funktioniert bestens. Ich habe auch eine Spanne bezogen auf jedes der Elemente in der checkBoxList, die ein click-Ereignis.
Klicken Sie auf die Veranstaltung, die wiederum ruft eine Steuerung, die "teilweise rendert" anzeigen -
Yii::app()->clientscript->scriptMap['jquery.js'] = false;
$this->widget('ext.xxx.EModelWidget', array(
'name' => $widget_name,
'manufacturer_id' => $manufacturer_id,
)
);
Und den entsprechenden widget-code druckt eine CheckBoxList nach Holen $Daten aus der db.
echo CHtml::checkBoxList($this->name, array(), $data, array(
'class' => 'modelFilter',
'separator' => '',
'template' => '<div>{input} {label}</div>',
'id' => 'dummyID',
));
Wie Sie sehen können, habe ich den Namen der Klasse für jedes element, das dargestellt wird, wie ein Kontrollkästchen, um modelFilter
Nun habe ich ein Skript in der Haupt-view-Datei zur Anzeige einer alert-box, wenn die checkBox von der Klasse modelFilter geklickt wird.
Yii::app()->clientScript->registerScript('model-selected', "
$('input.modelFilter').change(function(){
alert('Hellpo!');
});
");
Aber leider nie passiert.
Den zwei gängige Lösungen, die ich gelesen habe in allen Foren ist
a) Yii::app()->clientscript->scriptMap['jquery.js'] = false;, die Sie sehen können, dass ich ordnungsgemäß befolgt werden.
b) $Ergebnis und $processOutput Parameter der renderPartial mit false und true bzw.., das ist auch etwas, das ich verfolgt habe.
Also meine Frage ist was soll ich tun, einfach die ändern-Funktion auf einen Inhalt, der geladen wird per Ajax zu arbeiten, in Yii!!
InformationsquelleAutor Anand Sainath | 2012-02-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich das richtig verstehe, die Sie anrufen
$('input.modelFilter').change()
vor dem laden der Liste von Checkboxen. Wie Sie, dass der Ereignishandler wird nicht gebunden werden, um alle Elemente eingefügt, die nach dem Aufruf.Verwenden Sie die Delegierte Veranstaltungen statt direkt gebundenen Veranstaltungen. Werfen Sie einen Blick auf: http://api.jquery.com/on/ (Suche für "Direkte und Delegierte events")
Mensch, du bist ein Retter!
InformationsquelleAutor marcovtwout
Ich hatte ein ähnliches Problem, nachdem ich die durchgeführt Ajax-Aufruf die zurückgegeben ein teilweise gerenderten HTML mit javascript in (auto-generated by Yii ' s CActiveForm) war alles kaputt, weil kein jQuery-plugin mehr erkannt.
Nach einer langen recherche fand ich, dass die teilweise senden die jQuery-lib wieder und es initialisiert sich durch "vergessen" alles, was initialisiert werden, bevor (vor allem die anderen plugins, in meinem Fall die UI-dialog).
Das einzige Update war, zu sagen, Yii, damit Sie nicht die jQuery.js selbst in der teilweisen, aber lassen Sie auch andere JS-Dateien.
Also setzen Sie diese auf den Beginn der partiellen.
Beachten Sie, dass Sie konfigurieren müssen, um das laden der jQuery einmal auf die Seite zu laden.
InformationsquelleAutor adriandorin
OK, auf die Lösung, die ich gefunden, sei es versehentlich, ging um die jQuery-Skript für die teilweise gerenderte Datei, in der teilweise gerenderte Datei selbst.
Ich möchte wissen, ob dieser Stil ist allerdings korrekt.
InformationsquelleAutor Anand Sainath
Im Falle des Auges renderPartial es zerstört das bestehende Objekt von javascript
e.g
Ich habe ein Formular mit Petersilie j ist die Validierung funktioniert es perfekt wenn wir die render (), aber nicht erkennt, die Petersilie Objekt. wir müssen also neu initialisieren das Objekt wieder in meinem Fall war es
$("#form").Petersilie();
InformationsquelleAutor Tarun Gupta