Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Empêcher un onChange sous Firefox...

22 réponses
Avatar
david.bercot
Bonjour,

Je suis bloqu=E9 depuis un bon moment alors je fais appel =E0 vos
services...
Je souhaiterais, si la donn=E9e d'un champ de formulaire ne correspond
pas =E0 ce que j'attend, que l'utilisateur reste bloqu=E9 sur le champ en
question. Je fais aussi un contr=F4le des caract=E8res saisis alors voici
mon code (dissoci=E9 suivant le navigateur) :
// Validation des donn=E9es.
function demarrage_controles() {
if (FF) {
document.captureEvents(Event.KEYPRESS);
document.captureEvents(Event.CHANGE);
document.onkeypress =3D process_keypress;
document.onchange =3D process_change;
} else {
document.onkeypress =3D process_keypress;
for (i=3D0; i < document.forms[0].elements.length ; i++) {

document.forms[0].elements[i].attachEvent("onchange",process_change);
}
}
}
// On n'accepte que des chiffres.
function process_keypress(e) {
if (FF) {
if (e.target.tagName =3D=3D "input" && !((e.which > 47 &&
e=2Ewhich < 58) || e.which =3D=3D 0 || e.which =3D=3D 8 || e.which =3D=3D 1=
3)) {
return false;
}
} else {
if ((window.event.keyCode < 47 || window.event.keyCode >
58) && window.event.keyCode !=3D 13) {
return false;
}
}
}
// On compare au dernier cumul.
function process_change(e) {
if (FF) {
if (e.target.id.substr(0,3) =3D=3D "var" && e.target.alt !=3D "=
")
{
if (Number(e.target.value) < Number(e.target.alt)) {
alert ("Vous ne pouvez pas saisir de donn=E9es
inf=E9rieures au dernier cumul !");
e.preventDefault();
e.stopPropagation();
e.returnValue=3Dfalse;
}
}
} else {
if (window.event.srcElement.id.substr(0,3) =3D=3D "var" &&
window.event.srcElement.alt !=3D "") {
if (Number(window.event.srcElement.value) <
Number(window.event.srcElement.alt)) {
alert ("Vous ne pouvez pas saisir de donn=E9es
inf=E9rieures au dernier cumul !");
window.event.returnValue =3D false;
}
}
}
}
Mon probl=E8me vient de la fonction process_change sous Firefox o=F9 tout
ce que j'ai mis (stopPropagation etc...) ne sert =E0 rien et
l'utilisateur passe bien au champ suivant (le message est quand m=EAme
affich=E9). En revanche, sous IE, le window.event.returnValue =3D false
fonctionne correctement.

Auriez-vous une piste pour moi ?

Merci d'avance.

David.

10 réponses

1 2 3
Avatar
Laurent Vilday

document.onchange = process_change;


Event attribué en modèle traditionnel.

function process_change(e) {
e.preventDefault();
e.stopPropagation();
preventDefault() et stopPropagation() c'est pas pour le modèle traditionnel.


e.returnValueúlse;
Ca c'est pour IE, donc pas grand chose à faire dans le test if (FF).


Mon problème vient de la fonction process_change sous Firefox où tout
ce que j'ai mis (stopPropagation etc...) ne sert à rien et


Logiquement, juste une return false; devrait faire l'affaire.
false pour l'annuler, true pour le valider.

--
laurent

Avatar
David BERCOT
Bonjour,

Laurent Vilday wrote:
document.onchange = process_change;


Event attribué en modèle traditionnel.

function process_change(e) {
e.preventDefault();
e.stopPropagation();
preventDefault() et stopPropagation() c'est pas pour le modèle traditio nnel.



Je suppose, quand tu parles de modèle traditionnel, qu'il s'agit du
DOM au sens W3C et pas Microsoft ?
Si c'est bien le cas, les fonctions preventDefault et StopPropagation
s'appliquent bien sur ce domaine, non ?

e.returnValueúlse;
Ca c'est pour IE, donc pas grand chose à faire dans le test if (FF).



Là encore, je ne suis pas d'accord ;-)
En IE classique, on fait un returnvalue false (le returnValue avec un
'V' majuscule, c'est bien pour Firefox) !

Mon problème vient de la fonction process_change sous Firefox où to ut
ce que j'ai mis (stopPropagation etc...) ne sert à rien et


Logiquement, juste une return false; devrait faire l'affaire.
false pour l'annuler, true pour le valider.


Ben justement, ça ne marche pas !
Dans un cas extrême, en mettant ça :
<input id="var01" name="var01" onchange="return false;"/>
ça marche bien avec IE, mais pas avec Firefox !!!
Alors là, je dois reconnaître que je ne comprends pas du tout...

David.


Avatar
David BERCOT
Re-bonjour,

Voici un exemple de page peut être plus parlant :
<html>
<body>
<form id="vu">
<input id="var01" name="var01" size="5" onchange="return false;"/>
</form>
</body>
</html>

On ne peut pas faire plus simple, hein ;-)

Eh bien ça marche bien sous IE (si je change la valeur, je ne sors pas
de la zone "input" mais pas sous Firefox (v1.5.0.4) !!!

Alors là, je n'y comprends rien !!!

David.
Avatar
ASM

Comme de ttes façons tout ce que vous pouvez tous raccontez ne
fonctionnera pas dans NC4.5, voici :

<script type="text/javascript">
var val;
</script>
<form>
<p><input type=text onkeydown="val=this.value" onkeyup="this.value=val"
value="test 5">
<p><input type=text onkeydown="val=this.value" onkeyup="this.value=val"
value="test 4">
<p><input type=text onkeydown="val=this.value" onkeyup="this.value=val"
value="test 3">
<p><input type=text onkeydown="val=this.value" onkeyup="this.value=val"
value="test 2">
</form>


--
Stephane Moriaux et son [moins] vieux Mac
Avatar
David BERCOT
Comme de ttes façons tout ce que vous pouvez tous raccontez ne
fonctionnera pas dans NC4.5, voici :


Euh, je ne vois pas bien le rapport ????
Mon but est que cela fonctionne avec IE 6 et Firefox 1.5.
Pour le reste, on verra plus tard...

<script type="text/javascript">
var val;
</script>
<form>
<p><input type=text onkeydown="val=this.value" onkeyup="this.valu e=val"
value="test 5">
<p><input type=text onkeydown="val=this.value" onkeyup="this.valu e=val"
value="test 4">
<p><input type=text onkeydown="val=this.value" onkeyup="this.valu e=val"
value="test 3">
<p><input type=text onkeydown="val=this.value" onkeyup="this.valu e=val"
value="test 2">
</form>


Et ce script sert à quoi ? Quel est le rapport avec mon onchange ?
Mon but est, si la nouvelle valeur ne correspond pas à ce que
j'attends, que l'utilisateur reste bloqué sur la zone en question...

David.

Avatar
ASM

On ne peut pas faire plus simple, hein ;-)


ni moins : "ça ne veut rien dire"

Eh bien ça marche bien sous IE (si je change la valeur, je ne sors pas
de la zone "input" mais pas sous Firefox (v1.5.0.4) !!!

Alors là, je n'y comprends rien !!!


Y a rien à comprendre c'est de la bouse à M$

La preuve : ça ne fonctionne pas avec IE Mac ni avec Safari


--
Stephane Moriaux et son [moins] vieux Mac

Avatar
ASM
Re-bonjour,

<input id="var01" name="var01" size="5" onchange="return false;"/>


voici ce qui fonctionne dans *tous* mes navigateurs (y c NC4.5)

<input id="var01" name="var01" size="5"
onchange="this.value = defaultValue;"/>


--
Stephane Moriaux et son [moins] vieux Mac

Avatar
David BERCOT
ASM wrote:
Re-bonjour,

<input id="var01" name="var01" size="5" onchange="return false ;"/>


voici ce qui fonctionne dans *tous* mes navigateurs (y c NC4.5)

<input id="var01" name="var01" size="5"
onchange="this.value = defaultValue;"/>


Effectivement, ça fonctionne aussi chez moi. Et c'est très bien sauf
que ce n'est pas ce que je veux !
En effet, je souhaite que l'utilisateur soit bloqué sur le champ en
question, pas qu'il le quitte mais que sa valeur soit réinitilisée...

David.


Avatar
ASM

Mon but est, si la nouvelle valeur ne correspond pas à ce que
j'attends, que l'utilisateur reste bloqué sur la zone en question...


Là, je vois pas comment tu peux faire ça ?
(à part un alert et remise en focus de l'input si condition non remplie)

Les tabulations ni les clics souris ne fonctionnent plus avec ta ficelle
sur IE Win ?

--
Stephane Moriaux et son [moins] vieux Mac

Avatar
ASM
ASM wrote:

<input id="var01" name="var01" size="5"
onchange="this.value = defaultValue;"/>


Effectivement, ça fonctionne aussi chez moi. Et c'est très bien sauf
que ce n'est pas ce que je veux !


J'ai capté à l'autre post :-)

En effet, je souhaite que l'utilisateur soit bloqué sur le champ en
question


faut donc cacher tout le reste :-)

<input onchange="this.focus();" >


--
Stephane Moriaux et son [moins] vieux Mac


1 2 3