Cmenu linkOption conflit jquery

Bonjour à tous,

Mon problème est le suivant, je tente de placer une confirmation de déconnexion sur mon appli grâce à l’option “linkoption” : http://www.yiiframew…nu#items-detail


$this->widget ( 'zii.widgets.CMenu', array (

					'items' => array (

							array ('label'=> 'Accueil','url'=> array ('/site/index')),

							array ('label'=> 'Note de frais','url'=> array ('/noteDeFrais/index'),'visible'=>!Yii::app()->user->isGuest),

							array ('label'=> 'Pole','url'=> array('/service/admin'),'visible'=>Yii::app()->user->checkAccess('admin')),

							array ('label' => 'Bareme des frais','url' => array ('/baremeFrais/admin'),'visible' => Yii::app ()->user->checkAccess ('admin')),

							array ('label' => 'Etat','url' => array ('/etat/admin'),'visible' => Yii::app()->user->checkAccess ('admin')),

							array ('label' => 'Profil','url' => array ('/salarie/view&id=' . Yii::app ()->user->id),'visible' => ! Yii::app ()->user->isGuest),

							//array ('label' => 'Statistique','url' => array ('/noteDeFrais/statistique'),'visible' => Yii::app ()->user->checkAccess ( 'chef' )),

							//array ('label' => 'Inscription','url' => array ('/salarie/create'),'visible' => Yii::app ()->user->isGuest),

							array ('label' => 'Login','url' => array ('/site/login'),'visible' => Yii::app ()->user->isGuest),

							array ('label' => 'Logout (' . Yii::app ()->user->name . ')','url' => array ('/site/logout'),'visible' => ! Yii::app ()->user->isGuest, 'linkOptions' => array('confirm' => 'Etes-vous sûr de vouloir vous déconnecter ?')), 

					) 

			) );

			?>

La confirmation fonctionne bien cependant mon datepicker ne fonctionne plus.

Qu’est-ce qui peut créer un conflit entre mon option “linkoption” et mon datepicker ?

code du datepicker :


<script>

		$(function()

		{

			$( ".datepicker" ).datepicker({

			altField: "#datepicker",

			closeText: 'Fermer',

			prevText: 'Précédent',

			nextText: 'Suivant',

			currentText: 'Aujourd\'hui',

			monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],

			monthNamesShort: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],

			dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],

			dayNamesShort: ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'],

			dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],

			weekHeader: 'Sem.',

			dateFormat: 'dd-mm-yy'

			});

		});

	</script>

PS : si j’enlève la confirmation sur la déconnexion, mon datepicker fonctionne à nouveau.

Salut !

Ça ressemble à une erreur Javascript qui bloquerait l’ensemble de tes scripts. A l’aide de Firebug ou de la console Firefox (ou tout autre équivalent), vérifie si une erreur Javascript survient au chargement de ta page. Ça permettra au moins d’avancer sur ce point.

j’obtiens cette erreur avec firebug :

TypeError: $(…).datepicker is not a function

$( ".datepicker" ).datepicker({

ce que je ne comprend pas c’est que si mon script étais mauvais alors il serait mauvais que la confirmation soit là ou non ^^

edit : je précise que sans la confirmation, cette erreur n’apparait plus dans firebug

Ton script Datepicker est certainement appelé au chargement de la page et non après que tous les scripts externes soient chargés.

Essaie de remplacer ta balise <script> et ce qu’elle contient par:


<?php 

	Yii::app()->clientScript->registerScript('datepickerappel', "

		$('.datepicker').datepicker({

                        altField: '#datepicker',

                        closeText: 'Fermer',

                        prevText: 'Précédent',

                        nextText: 'Suivant',

                        currentText: 'Aujourd\'hui',

                        monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],

                        monthNamesShort: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],

                        dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],

                        dayNamesShort: ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'],

                        dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],

                        weekHeader: 'Sem.',

                        dateFormat: 'dd-mm-yy'

                        });


	", CClientScript::POS_READY); 

?>

Le script date picker sera ainsi appelé une fois jquery.ui chargé.

ai-je besoin de revoir les appels du script du coup ?

Sinon j’ai essayé en remplaçant le code entre les balise <script> par celui que clem m’a fourni, malheureseument ça ne change rien. j’ai toujours cette même erreur :


TypeError: $(...).datepicker is not a function

$( ".datepicker" ).datepicker({

Problème résolu avec l’extension : http://www.yiiframew…y-ui-datepicker

Mais je peux tjrs pas expliquer pourquoi ça ne fonctionne pas si ce n’est pas l’extension :confused:

Bonjour

Je vous suggère d’appliquer cette méthode de débugge:


<?php 

        Yii::app()->clientScript->registerScript('datepickerappel', "

                debugger;

                $('.datepicker').datepicker({

                        altField: '#datepicker',

                        closeText: 'Fermer',

                        prevText: 'Précédent',

                        nextText: 'Suivant',

                        currentText: 'Aujourd\'hui',

                        monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],

                        monthNamesShort: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],

                        dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],

                        dayNamesShort: ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'],

                        dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],

                        weekHeader: 'Sem.',

                        dateFormat: 'dd-mm-yy'

                        });


        ", CClientScript::POS_READY); 

?>

Entrez en mode débugge dans votre navigateur (CTRL+SHIFT+I généralement) et puis l’exécution devrait s’arrêter sur ‘debugger;’.

Faites:




q=$('.datepicker');



Si ‘q’ est vide, vous avez un début de réponse. Sinon, faites ‘q.datepicker’ pour voir si datepicker est defini.

En tous cas, cette méthode devrait aider quasi tous nos lecteurs pour pleins de cas.