Javascript, fonction dans input value

Résolu/Fermé
Signaler
Messages postés
616
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
8 août 2013
-
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
-
Bonjour,

je souhaite utiliser une fonction dans le value d'un bouton input mais je suis trop mauvais, y a quelque chose que je capte pas.
Si vous pouviez m'aider...

J'ai donc
<head>
<script type="text/javascript">
function encodeToHex(str){
//...encode en hexa
    return str;
}
</script>
</head>


Puis
<body><form>
<input type="submit" name="suppression" value="javascript:encodeToHex('ééàç');" />
</form></body>


mon bouton affiche javascript:encodeToHex('ééàç');, au lieu de ééàç.
la fonction n'est pas appelée.

Comment faire ?
Merci

5 réponses

Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
45
Bonjour,

Si tu veux charger automatiquement une valeur dans ton input, tu récupères direct ton input lorsque le JS va se charger en faisant ceci:

<head>
<script type="text/javascript">
document.getElementById('suppression').value = encodeToHex('ééàç');

function encodeToHex(str){
//...encode en hexa
return str;
}
</script>
</head>

Et dans ton HTML:

<body><form>
<input type="submit" id="suppression" name="suppression" />
</form></body>
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
616
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
8 août 2013
590
Merci beaucoup pour ta réponse.
J'ai réussi à afficher ce que je voulais mais pas comme je veux.
Aussi, je ne suis pas arrivé à faire fonctionner ton code, j'ai modifié comme cela :
<head>
<script type="text/javascript">

function encodeToHex(str){
//...encode en hexa
document.getElementById('suppression').value = out;
return; // str;
}

</script>
</head>


Et dans le HTML:

<body><form>

<input type="submit" id="suppression" name="suppression" value="" />
<script type="text/javascript">encodeToHex('str')</script>

</form></body>


Le problème c'est que j'affiche &#x73;&#x74;&#x72; au lieu de str


Une remarque c'est que mon formulaire contient le même élément mais traité par php :
<form action="page.php" method="post"
onsubmit='return window.confirm("Confirmer la suppression de &#x73;&#x74;&#x72; ?");'>
//Affiche : Confirmer la suppression de str ?


Mais je ne l'utilise pas pour le bouton submit car les caractères accentués sont mal affichés (tout est pourtant en utf8) et cela fonctionne dans le .confirm()

merci d'avance
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
45
Oui évidemment je n'avais pas vu les balises form, mais du coup la solution était de charger le script dans ton form, et tu l'as trouvé par toi même ;).

Sans le code de ta fonction encodeHexa() je ne peux pas te dire d'ou vient le problème d'affichage (je pense qu'il vient de ton code JS).

En ce qui concerne les caractères accentués, tu as bien mis cette balise alors si j'ai bien compris et ca ne marche pas ?
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8" />
Messages postés
616
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
8 août 2013
590
Merci encore pour ton aide matthoffman.
Oui tout est en utf8. Le fichier est en html5
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="utf-8" />


Voici la fonction javascript
function encodeToHex(str){
    var r=\"\";
    var e=str.length;
    var c=0;
    var h;
    while(c<e){
        h=str.charCodeAt(c++).toString(16);
        while(h.length<2) h=h;
        r+=\"&#x\" +h + \";\";
	//	r=\"&#x73;&#x74;&#x72;\";
    }
	document.getElementById('suppression').value = r;
    return;// r;
}


A moins de trouver une solution je vais ré-afficher un simple Supprimer sur le bouton (le nom du truc à supprimer est indiqué dans le texte avant et dans le .confirm() ).

Sinon, pour ceux que ça intéresse éventuellement plus tard, voici la fonction que j'utilise en php

// Convertir une chaine de caractères en sa représentation hexadécimale // (d'après http://codeigniter.com/forums/viewthread/45129/) 
function texttohex($plain_text) {

	$retval = '';
	$length = strlen($plain_text);

	for($idx = 0; $idx < $length; $idx++)
		$retval .= "&#x".str_pad(base_convert(ord($plain_text[$idx]), 10, 16), 2, '0', STR_PAD_LEFT).";";

	return $retval;
} 
Messages postés
616
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
8 août 2013
590
En fait, j'ai maintenant le même soucis avec le .confirm(), les caracteres sont enregistrés en UTF8 mais le navigateur pense avoir de l'ISO (symptômes typiques).
Pour résoudre ça :
J'ai modifié la ligne
$length = strlen($plain_text);

en
$length = mb_strlen($plain_text);

histoire d'être à jour.


Aussi, j'ai ajouté un utf8_decode à l'appel de la fonction php pour afficher dans le confirm()
texttohex(utf8_decode($nom_truc))
et cela fonctionne.
En sachant que $nom_truc, lors de sa création, passe par une fonction qui vérifie si la chaine est en utf8 et si non, la passe en utf8.

C'est quand même vraiment casse-pied ces encodages.
Je bricole, je bricole.
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
45
Ca doit etre moi, mais j'ai vraiment du mal a comprendre l'utilite de ta fonction.


Tu dis "Le problème c'est que j'affiche
&#x73;&#x74;&#x72;
au lieu de str", mais tu passes deja "str" en argument, alors pourquoi te faire du mal a vouloir le convertir pour reecrire la meme chose que tu as deja ?
Messages postés
616
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
8 août 2013
590
je demande à afficher str pour l'exemple, mais l'interet est de pouvoir afficher par exemple :
Supprimer l'article str (#commentaire)

Pour passer n'importe quel caractère, comme des parenthèses, sans faire du traitement cas par cas ou en amont, il est très simple de transformer tous les caractères en hexa ou decimal. Comme ça pas de soucis de compatibilité javascript, php, navigateur, etc.

Dans l'exemple ci-dessus, l'apostrophe et les parenthèses empêchent l'utilisation de l'argument en javascript.
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
45
Ton probleme doit etre bien particulier alors parce que moi je n'ai aucun soucis de compatibilite meme en utilisant les caracteres speciaux. Tant qu'ils sont duement mis dans une chaine de caractere, celle ci ne sera pas interpretee quant a son contenu. qu'il y ait des "<", ">", " ' ", etc.

Et je ne parle meme pas des caracteres d'echappement evitant des confusions au sein d'une meme string.

Enfin bon tant mieux si tu as resolu ton probleme :)