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 :

variable vide lors de l'envoi d'un formulaire


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 166
    Par défaut variable vide lors de l'envoi d'un formulaire
    Bonjour à tous, mon problème est tout bête mais je me prend la tête dessus depuis deux après midi
    Je suis entrain de créer un bbcode personnel ( histoire de comprendre comment tout ça marche et en suivant quelques tutos ) et je me retrouve avec un bug incompréhensible de mon point de vue.
    Tout fonctionne ( insertion de balises "personnelles" dans le textarea, prévisualisation dans une div séparée ) sauf que lorsque je soumet le formulaire, il me manque les variables provenant des deux textarea que je soumet à mon bbcode.
    Voici mon script en js:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    function insertTag(startTag, endTag, textareaId, tagType) {
    	var field  = document.getElementById(textareaId); 
    	var scroll = field.scrollTop;
    	field.focus();
    	/* === Partie 1 : on récupère la sélection  ( 1er if = ie, 2eme ) autres browsers === */
    	if (window.ActiveXObject) {
    			var textRange = document.selection.createRange();            
    			var currentSelection = textRange.text;
    	} 
    	else {
    			var startSelection   = field.value.substring(0, field.selectionStart);
    			var currentSelection = field.value.substring(field.selectionStart, field.selectionEnd);
    			var endSelection     = field.value.substring(field.selectionEnd);               
    	}
    	
    	/* === Partie 2 : on analyse le tagType === */
    	if (tagType) {
    		switch (tagType) {
    			case "url":
    			var url = prompt("Lien :");
    			var attr = 'title="'+prompt('Texte au survol du lien :');+'"';
    			startTag = '[url="'+url+'" '+attr+'"]';
    			break;
    			case "img":
    			var url = prompt("Nom de l'image :");
    			var attr = ''+prompt('Texte alternatif :');					
    			startTag = '[img="'+url+'" alt="'+attr+'"]';
    			endTag ='';
    			break;
    			case "+++":
    			var val = '+++';
    			startTag = "["+val+']';
    			endTag = "[/"+val+']';
    			break;
    			case "+":
    			var val = '+';
    			startTag = "["+val+']';
    			endTag = "[/"+val+']';
    			break;
    			case "clean":
    			currentSelection = currentSelection.replace("","");
    			currentSelection = currentSelection.replace("","");
    			currentSelection = currentSelection.replace("[g]","");
    			currentSelection = currentSelection.replace("[/g]","");
    			currentSelection = currentSelection.replace("","");
    			currentSelection = currentSelection.replace("","");
    			currentSelection = currentSelection.replace("[+++]","");
    			currentSelection = currentSelection.replace("[/+++]","");
    			currentSelection = currentSelection.replace("[+]","");
    			currentSelection = currentSelection.replace("[/+]","");
    			currentSelection = currentSelection.replace(/\/g,"");
    			currentSelection = currentSelection.replace("","");
    			currentSelection = currentSelection.replace(/\[img="(.*)" alt="(.*)"\]/g,"");
    			break;
    		}
    	}
    	/* === Partie 3 : on insère le tout === */
    	if (window.ActiveXObject) {
    		textRange.text = startTag + currentSelection + endTag;
    		textRange.moveStart("character", -endTag.length - currentSelection.length);
    		textRange.moveEnd("character", -endTag.length);
    		textRange.select();     
    	} 
    	else {
    		field.value = startSelection + startTag + currentSelection + endTag + endSelection;
    		field.focus();
    		field.setSelectionRange(startSelection.length + startTag.length, startSelection.length + startTag.length + currentSelection.length);
    	}
    	field.scrollTop = scroll;
    	if (tagType)
    		return false;
    }
    function preview(textareaId, previewDiv) {
    	var field = document.getElementById(textareaId).value; // Le contenu du textarea est dans la variable field
    	//traitement via replace
    	field = field.replace(/\[/g, '<').replace(/\]/g, '>');//remplace les crochets en <> pour ne pas avoir à tout échapper ensuite
    	$('#'+previewDiv).load("../scripts/bbcode.php", { texte:field},  
    		function success(data){  
    			console.log("success");
    		},
    		function error(data){alert('Une erreur s\'est produite, contacter votre webmaster');});
    	
    }
    et le petit script php qui remplace les balises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    extract($_POST);
    //isU sont des options -> formate le <g> en <strong>
    $texte = preg_replace("#&lt;sup&gt;(.*)&lt;/sup&gt;#isU",'<sup>$1</sup>',$texte);
    $texte = preg_replace("#&lt;g&gt;(.*)&lt;/g&gt;#isU",'<span class="b">$1</span>',$texte);
    $texte = preg_replace("#&lt;i&gt;(.*)&lt;/i&gt;#isU",'<span class="i">$1</span>',$texte);
    $texte = preg_replace("#&lt;u&gt;(.*)&lt;/u&gt;#isU",'<span class="u">$1</span>',$texte);
    $texte = preg_replace('#&lt;url="(.*)" title="(.+)"&gt;(.+)&lt;/url&gt;#isU','<a href="$1" title="$2"target="_blank">$3</a>',$texte);//encode pour les liens
    $texte = preg_replace('#&lt;img="(.*)" alt="(.+)"&gt;#isU','<img src="../images/upload/$1.jpg" alt="$2" />',$texte);//encode pour les images
    $texte = preg_replace('#&lt;\+\+\+&gt;(.*)&lt;/\+\+\+&gt;#isU','<strong>$1</strong>',$texte);//encode pour les strong
    $texte = preg_replace('#&lt;\+&gt;(.*)&lt;/\+&gt;#isU','<em>$1</em>',$texte);//encode pour les em
    echo nl2br("<p>$texte</p>");//transforme espaces en saut de ligne
    return nl2br("<p>$texte</p>");//transforme espaces en saut de ligne
    ?>
    Le formulaire et son traitement fonctionnent très bien en php ( dès que je retire le script de bbcode, tout refonctionne à merveille ) donc j'imagine que celà vient du js.
    J'ai eu beau modifier la valeur et/ou le contenu html de la textarea, rien ni fait .

    Si quelqu'un a une idée, je suis preneur

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    sans aucune garantie sur le reste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    currentSelection = currentSelection.replace(/\/g,"");
    devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    currentSelection = currentSelection.replace(/\\/g,"");
    il faut échapper l'antislash.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 166
    Par défaut
    Eu je viens de regarder ce que tu m'as proposé, je modifie cet anti-slash. Et bien après une nuit de recherche, je viens de me rendre compte que comme un boulet j'ai remplacé le name par l'id dans le textarea au lieu de l'ajouter. Résultat : pas de pb du bbcode

    Désolé de vous avoir fait perdre votre temps

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

Discussions similaires

  1. [AJAX] Recharcher un <div> lors de l'envoi d'un formulaire
    Par bebest93 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/09/2008, 09h30
  2. Recharger un <div> lors de l'envoi d'un formulaire
    Par bebest93 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/09/2008, 17h21
  3. Réponses: 6
    Dernier message: 19/03/2008, 16h47
  4. problème lors de l'envoi d'un formulaire
    Par fk04 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 15/04/2007, 21h00
  5. [MySQL] Exécuter 2 actions lors de l'envoi d'un formulaire
    Par mathieu7497 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/03/2006, 21h16

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