IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Modifier l'attribut action au clic sur submit


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 66
    Points : 49
    Points
    49
    Par défaut Modifier l'attribut action au clic sur submit
    Bonjour à toutes et à tous,

    un petit problème JS que je n'arrive pas à résoudre parce que je ne sais pas encore débugger du code JS.

    J'ai monté le code en piochant sur le net, mais manifestement, ça ne fonctionne pas.

    Une balise form contient un chemin dans son attribut action.
    Je voudrai, avant la soumission du formulaire, par un bouton submit, modifier le chemin en y ajoutant à la fin #monte10.
    Afin d'atteindre, au prochain affichage du même formulaire la balise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a name="monte'.$id_ordre_transport[$i]['value'].'">';
    où la variable PHP contient dans cet exemple 10.

    10 étant un numéro de ligne qui varie en fonction du bouton radio name="id_ordre_transport" qui est cliqué.

    Le tout étant codé avec CodeIgniter, mais ça ne change pas grand chose (?), et encapsulé en PHP avec des echo.
    Donc avec une gestion des " et des ' avec le caractère d'échappement \ selon les cas de figure.

    1) Code source HTML - La balise form telle qu'elle est écrite, sans l'action du JS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="http://localhost/CI/CI220_FMT1/index.php/ORDRES_TRANSPORTS/ordres_transports_c" id="englobe_tout" name="formulaire" method="post" accept-charset="utf-8">
    1bis) Code source PHP/CodeIgniter - Le même que 1), mais côté PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo form_open($form_action, 'id="englobe_tout" name="formulaire"');
    2) Code source HTML - Un des boutons qui doit modifier l'attribut action de la balise form en prenant compte de la valeur du bouton radio cliqué pour la ligne chosie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="action" value="Modifier" class = "bouton" onclick="document.getElementsByName('formulaire')[0].action='document.getElementsByName('formulaire')[0].action+'#monte'+ document.getElementsByName('id_ordre_transport')[0].value';" />
    2bis) Code source PHP/CodeIgniter - Le même que 2), mais côté PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo form_submit('action', 'Modifier'	, 'class = "bouton" onclick="document.getElementsByName(\'formulaire\')[0].action=\'document.getElementsByName(\'formulaire\')[0].action+\'#monte\'+ document.getElementsByName(\'id_ordre_transport\')[0].value\';"');
    3) Code source HTML - Le bouton radio qui peut être cliqué pour choisir la ligne (ici la ligne 19) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="radio" name="id_ordre_transport" value="19" id="19" tabindex="201"  />
    3bis) Code source PHP/CodeIgniter - Le même que 3), mais côté PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $html['id_ordre_transport'][$i] = array('name'=> 'id_ordre_transport', 'value'=>$ordres_transports[$i]['id_ordre_transport'], 'id'=>$ordres_transports[$i]['id_ordre_transport'],'tabindex'	=> 100 + 100 * $i + 1);
    Le bug/problème est à chercher dans 2).

    Merci pour votre aide !
    Nils.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsByTagName('form')[0].action='document.getElementsByTagName('form')[0].ac
    tu lui attribues la chaine du code ... pas la valeur retournée par le code ...
    enlève les ' autour
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Autant utiliser l'attribut formaction.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 66
    Points : 49
    Points
    49
    Par défaut
    Je faisais encore de la mise en forme de ma question que vos réponses étaient déjà tombées !
    Merci.

    Bovino,
    je vais voir formaction qui n'a pas l'air mal du tout. Merci pour le tuyau.

    Eventuellement, peux tu me dire où ça se positionne, en JS, ou, il semble plutôt (lecture rapide) en tant qu'attribut HTML pour mes boutons submit, c'est ça ?

    Ca y est !
    J'ai trouvé :
    http://www.w3schools.com/tags/att_input_formaction.asp

    Encore merci !
    A la prochaine ...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 66
    Points : 49
    Points
    49
    Par défaut
    Bon, finalement, pas encore résolu :

    Comment insérer du JS dans le formaction du bouton submit ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form_submit('action', 'Modifier'	, 'class = "bouton" formaction="' . $form_action . '#monte' . 'document.getElementsByName(\'id_ordre_transport\')[0].value' . '"')
    SpaceFrog, j'essaye de faire ce que tu me dis, mais sans succès.

    Voici le code corrigé (qui marche pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    form_submit('action', 'Modifier'	, 'class = "bouton"
    onclick="document.getElementsByName(\'formulaire\')[0].action=document.getElementsByName(\'formulaire\')[0].action+\'#monte\'+document.getElementsByName(\'id_ordre_transport\')[0].value;"')
    Et l'URL qui en découle :
    http://localhost/CI/CI220_FMT1/index...ES_TRANSPORTS/[object%20RadioNodeList]#monte18

    Est-ce un problème de concaténation avec + ?

    J'ai réussi à obtenir ce que je voulais avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    form_submit('action', 'Modifier'	, 'class = "bouton"
    onclick="document.getElementsByName(\'formulaire\')[0].action=' . '\'' . $fichier . '#monte\'+' . 'document.getElementsByName(\'id_ordre_transport\')[0].value;' . '"') .
    Le problème que je rencontre maintenant,
    c'est que document.getElementsByName(\'id_ordre_transport\')[0].value; me renvoie la valeur du premier bouton radio, et non pas la valeur du bouton radio qui a été cliqué.

    Comment ajouter au code ci-dessus, quelque chose comme where checked=true ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 66
    Points : 49
    Points
    49
    Par défaut
    Problème plus complexe que je le pensais, mais finalement résolu.

    Voici la solution mise en oeuvre :

    1) une fonction JS qui crée le #monte+numéro, précédé du nom du fichier CodeIgniter nécéssaire, pour l'URL (dans mon premier fichier "vue" de CodeIgniter, placé dans <head></head>).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function monte(fichier_c){
    	var boutonRadio = document.getElementsByName("id_ordre_transport");
    	var monte = "rien";
    	for (var i = 0; i < boutonRadio.length; i++){
    		if (boutonRadio[i].checked){
    			//alert(fichier_c);
    			//alert(boutonRadio[i].value);
    			//alert( "#monte"+boutonRadio[i].value);
    			var monte = fichier_c+"#monte"+boutonRadio[i].value;
    		}
    	}
    	if ( monte == "rien" ){
    		//alert(fichier_c);
    		var monte = fichier_c;
    	}
    	return monte;
    }
    Exemple de l'URL à créer : h t t p : //localhost/CI/CI220_FMT1/index.php/ORDRES_TRANSPORTS/ordres_transports_c#monte20

    2) Un exemple de bouton écrit en CodeIgniter, qui appelle la fonction au moment du clic (dans le fichier "vue" de ma page CodeIgniter).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form_submit('action', 'Modifier', 'class="bouton" onclick="document.getElementsByName(\'formulaire\')[0].action=monte(\''.$fichier_c.'\')"')
    La variable $fichier_c provient de la variable $form_action, initialisée dans le contrôleur, dont le contenu est extrait avec le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list($dossier, $fichier_c) = explode('/', $form_action);
    Ca marche !
    Merci pour votre aide.
    Nils.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Action au clic sur un bouton
    Par Pif_Paf_Pouf dans le forum Débuter avec Java
    Réponses: 20
    Dernier message: 30/04/2014, 18h48
  2. Action suite clic sur zone image
    Par Nanit6 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/07/2012, 09h42
  3. [Débutant] Modifier le background général au clic sur un bouton
    Par 18carats dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 04/06/2012, 21h04
  4. Modifier l'attribut "ACTION" de la balise "FORM"
    Par Alex35 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 08/10/2009, 14h17
  5. [Dojo] grid et action apres clic sur une ligne
    Par ghost55 dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 02/06/2009, 18h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo