Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/12/2011, 00h28   #1
Futur Membre du Club
 
Inscription : juin 2006
Messages : 65
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2006
Messages : 65
Points : 17
Points : 17
Par défaut manipulation de chaine de caractères

J'ai un code qui permet de spliter une chaine saisie en code ascii. Il fonctionne bien sous IE. Par contre sous Firefox je n'ai aucun résultat
Code :
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
 
<html>
<head>
<script type="text/javascript">
	function test(){
		var keycode;
			if (window.event) keycode = window.event.keyCode;
			else if (e) keycode = e.which;
			else return true;
 
			if (keycode == 13)
			{
				var chaine=document.getElementById('champ').value;
				var res='';
 
				for (var i=0; i<chaine.length; i++) {
					res=res+chaine.charCodeAt(i)+"#";
				}
				console.log("avant "+res);
				res = res.substr(0, res.length - 1);
				console.log("apres "+res);
				document.getElementById('result').value=res;
				document.forms['form1'].submit();
			}
	}
</script>
</head>
<body>
<form name="form1" method="POST" action="asci.php">
<input type="text" name="champ" id="champ" onkeypress="test()"/>
<input type="hidden" name="result" id="result" value="<?php if (isset($_POST['result'])) echo $_POST['result'];?>"/>
</form>
</body>
</html>
 
<?php
if(isset($_POST['result'])){
	echo 'resultat= '.$_POST['result'];
}
?>
Pour info le
Code :
console.log("avant "+res);
est pour tracer avec le javascript à la manière de Firebug pour FF. (http://www.moxleystratton.com/article/ie-console)

Je m'arrache les cheveux là, est-ce qu'un pro aurait une idée?

Merci d'avance
rin01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 05h54   #2
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 776
Points : 4 776
Bonjour,
seul IE possède un objet event global, window.event, pour les autres il te faut passer event en paramètre à ta fonction dans ce cas
Code :
1
2
3
4
function test(e){
  var keycode;
  // la suite du code
}
avec un appel
Code html :
<input type="text" name="champ" id="champ" onkeypress="test(event)"/>
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/12/2011, 08h28   #3
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 071
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 071
Points : 45 202
Points : 45 202
heu pourquoi pas juste un split('') ?
__________________
Ma page 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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/12/2011, 15h58   #4
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
Code :
1
2
3
4
5
				var res='';
 
				for (var i=0; i<chaine.length; i++) {
					res=res+chaine.charCodeAt(i)+"#";
				}
==>

Code :
var res = chaine.replace(/./gi,'$1'.charCodeAt(0)+'#');
Willpower est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 16h05   #5
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
Citation:
Envoyé par NoSmoking Voir le message
Bonjour,
seul IE possède un objet event global, window.event, pour les autres il te faut passer event en paramètre à ta fonction dans ce cas
Code :
1
2
3
4
function test(e){
  var keycode;
  // la suite du code
}
avec un appel
Code html :
<input type="text" name="champ" id="champ" onkeypress="test(event)"/>
heu ... perso je ne me fierai pas sur le fait que l'argument se nomme "event" sur tous les navigateurs n'ayant pas window.event (chrome et ie utilisant window.event) ... effectivement sous ma version de firefox l'argument s'appelle bien "event" mais c'est néanmoins beaucoup plus propre et plus sûr (je pense) de faire :

Code html :
<input type="text" name="champ" id="champ" onkeypress="return test(arguments[0]);"/>

ps: j'ai aussi ajouté un "return" car en général c'est utile et rarement contraignant.
Willpower est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 13h04   #6
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 776
Points : 4 776
Citation:
Envoyé par Willpower Voir le message
heu ... perso je ne me fierai pas sur le fait que l'argument se nomme "event" sur tous les navigateurs n'ayant pas window.event (chrome et ie utilisant window.event) ... effectivement sous ma version de firefox l'argument s'appelle bien "event" mais c'est néanmoins beaucoup plus propre et plus sûr (je pense) de faire :

Code html :
<input type="text" name="champ" id="champ" onkeypress="return test(arguments[0]);"/>
cela fonctionne également avec arguments[0], mais je fais confiance à FireFox quant à la pérennité de l'argument event, https://developer.mozilla.org/en/DOM/event.

Pour faire plus propre je pense qu'il est préférable d'ajouter la fonction une fois le document chargé via, par exemple, un
Code :
1
2
var oInput = document.getElementById('champ');
oInput.onkeypress = test;
Citation:
Envoyé par NoSmoking
seul IE possède un objet event global, window.event,...
c'est un racoourci compte tenu de la question posée.
OPERA, CHROME et SAFARI gèrent également un objet window.event et fonctionnent également avec event en paramètre.

pour test:
Code html :
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
 
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
function test(){
  var sTmp=[];
  sTmp.push('arg[0] : ' +arguments[0]);
  sTmp.push('window : ' +window.event);
  oDebug.innerHTML += (sTmp.join('<br>') +'<hr>');
}
</script>
</head>
<body>
onkeypress = test;<br>
<input id="test0" onkeypress="test();"><br>
test();<br>
<input id="test1" onkeypress="test();"><br>
test(event);<br>
<input id="test2" onkeypress="test(event);"><br>
test(arguments[0]);<br>
<input id="test3" onkeypress="test(arguments[0]);"><br>
<div id="DEBUG"></div>
<script type="text/javascript">
var oInput = document.getElementById('test0');
var oDebug = document.getElementById('DEBUG');
oInput.onkeypress = test;
</script>
</body>
</html>
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h39.


 
 
 
 
Partenaires

Hébergement Web