8722 sujets

Développement web côté serveur, CMS

Bonjour,

je suis en train de transférer mes application d'un ancien serveur vers un nouveau et lors du test je me rends compte que mes onchange ne fonctionnent plus.

Voici un exemple

<select name="tri" id="tri" onchange="window.location.href='<?php echo $this->baseUrl();?>/Fichier/listeclients/tri/'+this.value+'/filtre/'+$('select#filtre').attr('value')+'/filtre2/'+$('select#filtre2').attr('value')+'/page/<?php echo $page->getCurrentPageNumber();?>'">


J'ai modifié mon select pour afficher une simple alerte et ça marche
<select name="tri" id="tri" onchange="alert('ok')">


le php est bien interprété car lorsque je regarde le code source de la page j'ai ceci :


<select name="tri" id="tri" onchange="window.location.href='/cdl/Fichier/listeclients/tri/'+this.value+'/filtre/'+$('select#filtre').attr('value')+'/filtre2/'+$('select#filtre2').attr('value')+'/page/1'">


je viens de modifier mon code de la manière suivante

<select name="tri" id="tri" onchange="window.location.href='<?php echo $this->baseUrl();?>/Fichier/listeclients/tri/code_identif_cci/filtre//filtre2/1/page/<?php echo $page->getCurrentPageNumber();?>'">

et celui-ci fonctionne parfaitement.

Le problème ne serait donc pas au niveau du php mais des variables en javascript.

Quelqu'un aurait-il une idée du pourquoi ça fonctionnait avant et plus maintenant ?
Modifié par MathieuD (29 Nov 2013 - 11:46)
a écrit :
je suis en train de transférer mes application d'un ancien serveur vers un nouveau et lors du test je me rends compte que mes onchange ne fonctionnent plus.

Ca tombe bien si ça ne marche plus, c'est une mauvaise pratique

+ Si c'est pour actualiser le contenu d'un select en fonction d'un autre, ou pour filtrer un contenu en fonction de critères, tourne-toi vers AJAX.
+ Si c'est pour de la navigation ou exécuter une action sur une sélection, mets un bouton submit.

Dans tous les cas, arrête les onchange sur select qui chargent une page ou qui déplacent le focus inopinément.
Modifié par QuentinC (29 Nov 2013 - 13:32)
Merci pour les remarques cependant ce n'est pas mon seul soucis du même type.
J'ai sur un formulaire ZendFramework une action sur le onfocus qui ne fonctionne plus non plus

Exemple
-> un champ de mon formulaire

$typeclient = new Zend_Form_Element_Text('Types_clients_id');
		$typeclient		->setLabel('Type de clients')
		->setAttrib('onFocus','champsur(this)')
		->setRequired(true)
		->addDecorator('Label', array('class' => 'tabaide','requiredSuffix' => ' <em>*</em>', 'escape' => false,'tag' => 'dt'));


et l'action de mon fichier .js

function champsur(obj){
	champ=obj;
	$("input").removeAttr("disabled");
	$("input").removeClass("avecFocus").addClass("sansFocus");
	$("select").removeClass("avecFocus").addClass("sansFocus");
	$("textarea").removeClass("avecFocus").addClass("sansFocus");
	champ.className  = "avecFocus";
}


Je cherche à comprendre pourquoi ces éléments ne fonctionnent plus et pas forcément est-ce que c'est une bonne ou une mauvaise pratique même si je comprends la remarque
Là encore, si je comprends bien ton onfocus, c'est juste pour ajouter/supprimer une classe CSS.

Dans ce cas tu devrais plutôt utiliser la pseudo-classe :focus. C'est plus robuste et ça ne nécéssite pas de javascript.
Ce qu'il y a c'est que mes onchange onfocus et pleins d'autres sont fonctionnels car si derrière je mets un
alert('ok'); 
celui-ci fonctionne parfaitement.

Comme dit précédemment j'ai l'impression que cela vient des variables du genre
'+this.value+'/
ou
/'+$('select#filtre2').attr('value')+'/
..., qui ne sont pas correctement interprétées et qui donc fausses mes actions.
Modérateur
bonjour,

effectivement, this.value ne renverra rien sur un select,
ce sera plutôt:
this.options[this.selectedIndex].value)
// Ou en jQuery
$(this).val()
Bon le problème pour les onchange est réglé.
Il fallait changer les $('select#filtre2').attr('value') par $('#filtre2).val().

Il me reste un soucis avec mon fichier .js, visiblement ce que j'ai dans $(document).ready(function(){ ou après n'est pas interprété ... avant par contre un alert fonctionne parfaitement
Pour moi oui je fais bien l'appelle à mes fichiers en début de script
Y a-t-il un moyen de le vérifier rapidement ?
Et bien utilise l'outil dev de ton navigateur pour voir si ça l'est ou pas... Pour ma part j'utilise chrome et son web developer tool est très utile

ici une capture écran de l'outil, tu l'as depuis le clic droit sur la fenetre de ton navigateur chrome > inspecter l'élément

upload/52082-CaptureEcr.jpg
Modifié par Peter-L (02 Dec 2013 - 15:38)
Finalement, j'ai téléchargé une librairie plus récente de JQuery et ça refonctionne.

Il ne me manque qu'un dernier élément.
J'ai un champs de saisie avec un attribut 'lettre', je modifie cet attribut et en récupère la valeur pour le chargement d'une page annexe.

Avant je récupérais cette valeur par $("#Clients_id").attr('lettre') mais aujourd'hui celui-ci ne me renvois plus rien. L'outils de dev de chrome me permet de constater que 'lettre' possède bien la valeur que je lui passe mais je n'arrive pas à la lire dans mon script.

Comment récupérer cette valeur vu que $("#Clients_id").attr('lettre') ne fonctionne pas ?