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

pb Netscape, Firefox et Mac

7 réponses
Avatar
Jean
Bonjour,

J'utilise la fonction ci-dessous pour créer un lien vers une autres pages
d'un site. Cette procédure fonctionne très bien avec IE mais pas avec les
autres.

function choix_cat(valeur,mode){
document.getElementById('categories').value = valeur; //
sauvengarde de la valeur de catégorie
document.forms['formcat'].action="produits" + mode + ".php"; // j'ai
trois page produits0.php, produits1.php et produits2.php
document.forms['formcat'].submit();
// on envois le tout
}

avec dans le Body :

<form action="produits.php" method="post"
enctype="multipart/form-data" name="formcat">
<input name="categories" id="categories" type="hidden" value="<?
echo $categories; ?>">
</form>

Comment puis-je faire ?

Merci d'avance.

Jean

7 réponses

Avatar
ASM
Bonjour,

J'utilise la fonction ci-dessous pour créer un lien vers une autres pages
d'un site. Cette procédure fonctionne très bien avec IE mais pas avec les
autres.

function choix_cat(valeur,mode){
document.getElementById('categories').value = valeur; //



Il ne faut pas racconter n'importe quoi aux Netscapes et FireFox

Prendre l'habitude d'appeler un chien : "un chien" et non "un chat"

Ici on s'adresse à un élément par son nom et non pas par son ID
puisqu'il n'en a pas !

document.forms['formcat']['categories'].value = valeur;
ou
document.formcat.categories.value = valeur;

sauvengarde de la valeur de catégorie
document.forms['formcat'].action="produits" + mode + ".php"; // j'ai
trois page produits0.php, produits1.php et produits2.php
document.forms['formcat'].submit();
// on envois le tout
}

avec dans le Body :

<form action="produits.php" method="post"
enctype="multipart/form-data" name="formcat">
<input name="categories" id="categories" type="hidden" value="<?
echo $categories; ?>">
</form>

Comment puis-je faire ?

Merci d'avance.

Jean






--
Stephane Moriaux et son [moins] vieux Mac

Avatar
ASM
Bonjour,

J'utilise la fonction ci-dessous pour créer un lien vers une autres pages
d'un site. Cette procédure fonctionne très bien avec IE mais pas avec les
autres.


Sauf à ce qu'il y ait plusieurs 'categories' il n'y a aucune raison, au
vu de ce que tu donnes, pour que ça ne fonctionne pas.

voir si ce multipart/form-data est nécessaire ?
voir à temporiser le submit ?

J'aurais préféré que tu t'en tiennes à l'arbre des forms, mais bon !

function choix_cat(valeur,mode) {
var f = document.forms['formcat';
f.categories.value = valeur;
f.action = 'produits'+mode+'.php';
setTimeout(function(){f.submit();},50);
}


function choix_cat(valeur,mode){
document.getElementById('categories').value = valeur; //
sauvengarde de la valeur de catégorie
document.forms['formcat'].action="produits" + mode + ".php"; // j'ai
trois page produits0.php, produits1.php et produits2.php
document.forms['formcat'].submit();
// on envois le tout
}

avec dans le Body :

<form action="produits.php" method="post"
enctype="multipart/form-data" name="formcat">
<input name="categories" id="categories" type="hidden" value="<?
echo $categories; ?>">
</form>

Comment puis-je faire ?

Merci d'avance.

Jean






--
Stephane Moriaux et son [moins] vieux Mac

Avatar
BertrandB

function choix_cat(valeur,mode) {
var f = document.forms['formcat';
f.categories.value = valeur;
f.action = 'produits'+mode+'.php';
setTimeout(function(){f.submit();},50);
}

Tiens pourquoi pas setTimeout(f.submit,50); ?


Avatar
ASM

function choix_cat(valeur,mode) {
var f = document.forms['formcat';
f.categories.value = valeur;
f.action = 'produits'+mode+'.php';
setTimeout(function(){f.submit();},50);
}

Tiens pourquoi pas setTimeout(f.submit,50); ?



n'est-ce point normalement orthographié :
setTimeout('uneFonction()',timer) ?

setTimeout('f.submit()',50)
ne fonctionnera pas car f n'est pas global.

setTimeout(function(){f.submit();},50);
je suis quasi certain que c'est sémantiquement correct.

Quant à setTimeout(f.submit,50)
pas personnellement essayé voir à voir si ça donnait une erreur ou pas

De tte façon, cette temporisation n'est là que pour tenter d'aider le
navigateur hésitant, et j'ai vu ce genre de béquille fonctionner avec un
timer à zéro :-(


--
Stephane Moriaux et son [moins] vieux Mac


Avatar
Laurent Vilday

function choix_cat(valeur,mode) {
var f = document.forms['formcat';
f.categories.value = valeur;
f.action = 'produits'+mode+'.php';
setTimeout(function(){f.submit();},50);
}

Tiens pourquoi pas setTimeout(f.submit,50); ?



n'est-ce point normalement orthographié :
setTimeout('uneFonction()',timer) ?


Si si, ou encore dans son contexte réel (ca va aider a comprendre la
suite) :
window.setTimeout('uneFonction()', timer);
window.setTimeout(uneFonction, timer);

setTimeout('f.submit()',50)
ne fonctionnera pas car f n'est pas global.


Oui car la référence exécutée dans le 1er paramètre du setTimeout est
exécuté dans le contexte global comme tu le soulignes, ou plus
précisement dans le contexte de l'objet "window"

donc avec
setTimeout('f.submit()',50)

au bout des 50ms définies, l'interpréteur essaye de faire quelquechose
équivalent à ça
window.f.submit.call(this);

Et donc ça marche pas.

setTimeout(function(){f.submit();},50);
je suis quasi certain que c'est sémantiquement correct.


Oui, c'est parfait. Avec ça, au bout du timer, l'interpréteur essayes
window.anonymousFunction.call(this);

Et là ça passe, on arrive à acceder à f.submit(); puisque la fonction
anonyme a embarqué avec elle son contexte d'exécution (outer closure) au
moment de sa définition.

--
laurent



Avatar
Bertrand B


setTimeout('f.submit()',50)
ne fonctionnera pas car f n'est pas global.


Oui car la référence exécutée dans le 1er paramètre du setTim eout est
exécuté dans le contexte global comme tu le soulignes, ou plus
précisement dans le contexte de l'objet "window"



Si je vous suis avec setTimeout(f.submit,50); la méthode submit sera
bien appelée mais le this ne sera pas bon d'où l'intérêt de faire la
closure.

Pff j'ai toujours un peu de mal avec les contextes d'exécution de javas cript


Avatar
YD
setTimeout(function(){f.submit();},50);
Tiens pourquoi pas setTimeout(f.submit,50); ?

donc avec


setTimeout('f.submit()',50) [...]
setTimeout(function(){f.submit();},50);
je suis quasi certain que c'est sémantiquement correct.


Oui, c'est parfait. Avec ça, au bout du timer, l'interpréteur essayes
window.anonymousFunction.call(this);


Tu ne réponds pas à la question de départ !

setTimeout(f.submit, 50)

est théoriquement correct, une closure est créée et f renvoie bien l'objet
voulu 50 ms après, donc une éternité après la fin du script. Mais...
si ça passe dans IE, c'est rejeté par Fx qui renvoie une énigmatique "uncaught
exception" que l'on n'a pas en utilisant setTimeout(function(){f.submit();},50).

Visiblement, le moteur Gecko ne veut pas assigner directement à une fonction
anonyme, une méthode d'un objet HTML du navigateur.

--
Y.D.