Javascript, fonction dans input value

Résolu
CH4NCE Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   -  
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   -
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

matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
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
CH4NCE Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   728
 
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
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
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" />
0
CH4NCE Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   728
 
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;
} 
0
CH4NCE Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   728
 
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
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 ?
0
CH4NCE Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   728
 
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.
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
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 :)
0