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

fermer une fenetre après un moment

10 réponses
Avatar
samuel
bonjour!
jaimerais fermer mon popup quelques temps apr=E8s la perte de focus..

un d=E9but d'id=E9e trouv=E9 ici
http://www.gamerz.be/programmation-php-/t-javascript-fermeture-dune-popup-a=
-la-perte-du-focus-148899.html

vous avez des solutions? :)

10 réponses

Avatar
SAM
Le 6/26/09 4:01 PM, samuel a écrit :
bonjour!
jaimerais fermer mon popup quelques temps après la perte de focus..




<body onblur="setTimeout('self.close()', 3000);">

Mais il parait que ça peut ne pas fonctionner avec IE
(probablement des vieux IE ?)


un début d'idée trouvé ici
http://www.gamerz.be/programmation-php-/t-javascript-fermeture-dune-popup-a-la-perte-du-focus-148899.html



Ben c'est quasi ce que je donne mais en délayé.

vous avez des solutions? :)



Pour IE ?
Non et ça ne m'intéresse pas, na !

Que nous dit M$ ?
<http://msdn.microsoft.com/en-us/library/aa210963(office.11).aspx>
s'applique aux windows2 (qu'est-ce que c'est ?) :
<http://msdn.microsoft.com/en-us/library/aa209125(office.11).aspx>


<body onload="var w = (typeof ActiveDocument != 'undefined')?
ActiveDocument.parentWindow : window;
w.onblur = function() {
setTimeout(function(){w.close();},3000);
}">

Peut-être ?
(testé Fx où je sais que ça fonctionne de ttes façons)

--
sm
Avatar
samuel
merci, cest niquel!
sauf que mnt, si j'affiche un alert(), je perds le focus...
jenlève le alert




Avatar
samuel
rien à voir.... mais ça marche pas, il comprend pas quel msg est quel
msg.?
le var a=document..... veut rien dire??


function check(b,msg){
var a=document.formulaire_comm.b;
if(a.value==''){msg += "a";a.style.backgroundColor = "rgb
(160,160,160)";}else{a.style.backgroundColor = "rgb(160,160,0)";}
return msg;
}
function verif(){
var msg = "";
check('nom',msg);ckeck('lien',msg);check('txt',msg);
//if(document.formulaire_comm.nom.value == ''){msg +=
"a";document.formulaire_comm.nom.style.backgroundColor = "rgb
(160,160,160)";}
//if(document.formulaire_comm.lien.value == ''){msg +=
"b";document.formulaire_comm.lien.style.backgroundColor = "rgb
(160,160,160)";}
//if(document.formulaire_comm.txt.value == ''){msg +=
"c";document.formulaire_comm.txt.style.backgroundColor = "rgb
(160,160,160)";}
if (msg == "") {return(true);}
else{return(false);}
}
Avatar
SAM
Le 6/27/09 4:39 PM, samuel a écrit :
rien à voir.... mais ça marche pas, il comprend pas quel msg est quel
msg.?
le var a=document..... veut rien dire??



ce n'est pas forcement pask'il te gueule à l'erreur pour 'document' que
c'est là qu'elle est
l'erreur est à la ligne indiquée
pas d'pot que ça commence par 'document' c'est lui qui trinque

C'est peut être 'formulaire_comm' qui n'est pas bon ?
Normalement 'formulaire_comm' doit être un *name* et non pas un *id*
bien que le nom 'formulaire_comm' puisse être donné à la fois au name et
à l'id.

Pas clair ? tant pis.

Brefle, ton form doit être nommé 'formulaire_comm'
et ton élément doit être nommé 'b'
dans : document.formulaire_comm.b

comme 'b' n'est rien d'autre qu'une espèce de variable, (un argument de
la fonction check() ) ce n'est donc pas un name

Le good way serait :

var a = document.forms['formulaire_comm'].elements[b];

et pour mieux voir où est l'erreur on fait :

function check(b,msg){
var a = document.formulaire_comm; // délayage en 2 lignes
a = a.b; // ça devrait geuler : "erreur à cette ligne'
/* à remplacer par :
a = a.elements[b];
ou :
a = a[b];
*/
if(a) {
if(a.value == '') {
msg += 'a';
a.style.backgound.color = 'rgb(160,160,160)';
// certains brouteurs n'acceptent pas qu'on leur style, colorise,
// les boutons (dont les cases à cocher et radio-boutons)
return msg;
}
}
else alert('"b" est quoi ?');
}



Pour l'histoire des styles de la vérif,
il faut savoir que certains brouteurs n'aiment pas qu'on leur colorise
les boutons (check ou radio compris)

Mieux vaut essayer de coloriser le conteneur

function check(b, msg) {
var a = document.formulaire_comm.elements[b];
if(a &&
a.value == '') {
msg += '!';
var p = a.parentNode;
while(p.tagName != 'LABEL') p=p.parent.node;
a.className = 'rouge';
}
return msg;
}

avec :

CSS:
=== .rouge { color: red }

HTML :
=====
<form name="formulaire_comm">
<p>
<label for="leNom">Votre nom : </label>
<input name="nom" id="leNom">
</p>
<p>
<label for="leLien">URL du lien : </label>
<input name="lien" id="leLien">
</p>
... etc ...


============================ On peut aussi faire (sans changer la fonction ci-haut) :


CSS:
=== .rouge { color: red; border: 1px solid }
.rouge input[type="text"] { background: rgb(160,160,160); color: blue }

HTML :
=====
<form name="formulaire_comm">
<p>
<label for="leNom">
Votre nom : <input type="text" name="nom" id="leNom">
</label>
</p>
<p>
<label for="leLien">
URL du lien : <input type="text" name="lien" id="leLien">
</label>
</p>



--
sm
Avatar
SAM
Le 6/27/09 4:31 PM, samuel a écrit :
merci, cest niquel!
sauf que mnt, si j'affiche un alert(), je perds le focus...



Bon, dis-moi,

Là dans mon IE (et autres brouteurs)

<body onblur="setTimeout('self.close()', 2000);">

fonctionne comme attendu.

Je ne comprends pas bien que ça ait pu ne pas fonctionner chez toi.


Oui, bien entendu,
dès que la fenêtre-popup passe sous qque chose elle perd le focus.

Un truc :

<html><head>
<script type="text/javascript">
var pop = {
ok: 'ok',
alarm: function(msg) {
this.ok = null;
alert(msg);
this.ok = 'ok';
},
ferme: function() {
if(this.ok)
setTimeout('self.close()',1000);
},
ouvre: function(url) {
window.open(url,'truc',',');
}
};
</script>
</head>
<body onblur="pop.ferme()">
<h1>Le PopUp</h1>
<p>auto-fermable après délai,
mais resistant à une forme speciale d'alerte</p>
<p>Test :
<a href="javascript:pop.ouvre(self.location)">pop popup</a>
<a href="javascript:pop.alarm(self.location)">test pop alert</a></p>
</body></html>
Avatar
samuel
> > le var a=document..... veut rien dire??



ce n'est pas forcement pask'il te gueule l'erreur pour 'document' que
c'est l qu'elle est
l'erreur est la ligne indiqu e
pas d'pot que a commence par 'document' c'est lui qui trinque



où est ce quil pourrait me dire quil y a une erreur? (moi j'imaginais
juste)

C'est peut tre 'formulaire_comm' qui n'est pas bon ?
Normalement 'formulaire_comm' doit tre un *name* et non pas un *id*
bien que le nom 'formulaire_comm' puisse tre donn la fois au name et
l'id.

Pas clair ?  tant pis.



ça cest ok


Le good way serait :

  var a = document.forms['formulaire_comm'].elements[b];




ok!


function check(b,msg){
   var a = document.formulaire_comm; // d layage en 2 lignes
   a = a.b;      // a devrait geuler : "erreur cette ligne'
   /* remplacer par :
   a = a.elements[b];
   ou :
   a = a[b];
   */
   if(a) {
      if(a.value == '') {
      msg += 'a';
      a.style.backgound.color = 'rgb(160,160,160)';
      // certains brouteurs n'acceptent pas qu'on leur style, color ise,
      // les boutons (dont les cases cocher et radio-boutons)
      return msg;
      }
   }
   else alert('"b" est quoi ?');
}
Pour l'histoire des styles de la v rif,
il faut savoir que certains brouteurs n'aiment pas qu'on leur colorise
les boutons (check ou radio compris)



quest ce que cest que cette bestiole, un brouteur?


du coup, comme ça ça marcherait:
function check(b,msg){
var a=document.formulaire_comm.elements[b];
if(a.value==''){msg += "!";a.className = 'rouge';}else
{a.a.className = '';}
return msg;
}
function verif(){
var msg = "";
check('nom',msg);ckeck('lien',msg);check('txt',msg);
if (msg == "") {return(true);}
else{return(false);}
}
Avatar
SAM
Le 6/27/09 8:06 PM, samuel a écrit :
le var a=document..... veut rien dire??





ce n'est pas forcement pask'il te gueule l'erreur pour 'document' que
c'est l qu'elle est
l'erreur est la ligne indiqu e
pas d'pot que a commence par 'document' c'est lui qui trinque



où est ce quil pourrait me dire quil y a une erreur? (moi j'imaginais
juste)



Ha?
Normalement IE te l'indique au moins dans la barre d'état.
(après faut y cliquer pour qu'il ouvre le message)
Pour Fx, on laise ouverte à côté sa Console d'erreurs

Pas clair ? tant pis.



ça cest ok



Ça fait rien je rappelle la totale :

une balise, on peut lui donner un ID
cet ID ne peut exister qu'une fois dans toute la page
une balise de formulaire on peut lui donner un NAME
On peut donner le même name à plusieurs éléments (tels que radio ou
checkbox)

Un élément peut avoir même nom d'ID que de NAME
<input name="truc" id="truc">

IE confond les deux, pour lui, id ou name c'est pareil.
Si l'un est absent il prend l'autre même si on lui a dit :
document.getElementById('machin')
s'il trouve
<input name="machin">
ça lui va. (le con!)

Les éléments de formulaires doivent avoir un NAME (pour qu'ils puissent
être envoyés et surtout que le serveur puisse en faire qque chose)

L'accessibilté veut qu'on se serve de la balise LABEL pour le blabla lié
à un champ (un input), ainsi, de cliquer n'importe où dans le blabla
équivaut à cliquer l'input. Très pratique pour les radios ou checkboxes.

Cependant, le LABEL pour savoir de quoi il retourne a besoin de
l'attribut FOR, ce dernier ne s'adresse qu'à l'ID de l'élément pas trop
loin.
Nous voilà avec un INPUT qui a besoin d'un NOM et d'un ID.
Les radios d'un même groupe auront donc le même nom mais des id différents.



Le good way serait :

var a = document.forms['formulaire_comm'].elements[b];



ok!



Pour l'histoire des styles de la v rif,





c'est moi qui ai oublié tous les accents ?
ou bien c'est ce @#?$! de gMail qui sème sa zizanie ?

il faut savoir que certains brouteurs n'aiment pas qu'on leur colorise
les boutons (check ou radio compris)



quest ce que cest que cette bestiole, un brouteur?



navigateur = browseur = "brouteur"


du coup, comme ça ça marcherait:



Y a des chances, ça dépend un peu de ce qu'en fait l'autre fonction.

function check(b,msg){



Il n'y a pas besoin de balader 'msg'

<html>
<script type="text/javascript">

function check(b) {
var ok = 0, // 0 équivalent à false
a = document.formulaire_comm.elements[b];
a.className = ''; // s'assurer que ça repasse en normal
if(a.value.length<1) { // car ça a pu être corrigé
ok++; // '1' équivalent à true
a.className = 'rouge';
a.focus();
a.select();
}
return !ok; // ça doit retourner le contraire de ok
}

function verif() {
return (check('nom') && check('lien') && check('txt'));
}
</script>
<style type="text/css">
.rouge { border: 2px red solid; background: #ffc }
</style>
<form name="formulaire_comm" action="#" onsubmit="return verif();">
<p>nom: <input name="nom">
<p>lien: <input name="lien">
<p>commentaire: <textarea name="txt"></textarea>
<p><input type="reset"> <input type="submit">
</form>
</html>

yaka copier-coller-enregistrer avec notePad pour que ça fonctionne.
(enfin ... si gMail n'y met pas son KK)

--
sm
Avatar
samuel
> IE confond les deux, pour lui, id ou name c'est pareil.
Si l'un est absent il prend l'autre même si on lui a dit :
    document.getElementById('machin')
s'il trouve
    <input name="machin">
ça lui va. (le con!)




oh il est bête

cest cool :)
merci
Avatar
samuel
ah, là il colorise pas tout cqui va pas...
avec:
check('txt');
check('lien');
check('nom');
return (check('nom') && check('lien') && check('txt'));

ça marche mais cest pe un peu lourd..

(mnt jai la console ouverte, il me trouve des erreurs là!:)
font-family:Verdana;Helvetica;Arial; sans-serif;
font-size: 11px;


nouvelle question, tellement tu réponds vite :)
si je veux cacher certaines parties dun texte suivant l'identité du
visiteur, en utilisant un style qui naffiche rien mettons..
comment je peux faire?
j'écris un cookie avec le password du type lors de sa 1ere visite, et
ensuite je compare au vrai mot de passe, et là je dois écrire en
javascript le css du style "censure" : soit visible soit pas
ça jle fais sur chaque page ?
merci!
Avatar
SAM
Le 6/28/09 7:14 PM, samuel a écrit :
ah, là il colorise pas tout cqui va pas...
avec:
check('txt');
check('lien');
check('nom');



à mon idée
c'est que ça doit être normal, non ?

tu fais suivre une série de fonctions dont chacune renvoie 'false'
si ce n'est pas OK
Le 'return false' stoppe tout. (dès qu'1 champs est vide ça s'arrête là)

On n'a donc pas d'avantage / à ne faire que la ligne suivante

return (check('nom') && check('lien') && check('txt'));

ça marche mais cest pe un peu lourd..



Pour la vérif de formulaire il y a 2 méthoses :
- un élément à la fois et on re-soumissionne
(tu as noté qu'on est renvoyé automatiquement dans le champ fautif ?)
- un élément à la fois mais on attend de tous les avoir vérifiés

Pour la 2ième il faut donc faire comme tu faisais :
(que j'adapte à ma sauce)

function verif() {
var ok = []; // un array
ok[0] = check('txt'); // son 1er élément
ok.push(check('lien')); // les
ok.push(check('nom')); // suivants
return (ok[0] && ok[1] && ok[2]);
// si un seul est faux ça renvoie faux donc pas de submit
}


(mnt jai la console ouverte, il me trouve des erreurs là!:)
font-family:Verdana;Helvetica;Arial; sans-serif;
font-size: 11px;



Heu ... tu ne sais pas faire une règle CSS ?
Les polices doivent être séparées par une virgule !


nouvelle question, tellement tu réponds vite :)
si je veux cacher certaines parties dun texte suivant l'identité du
visiteur, en utilisant un style qui naffiche rien mettons..
comment je peux faire?



On ne peut rien cacher en JS
(tout est visible dans le code !)

Et là tu proposes même que le truc est seulement caché par CSS
c'est un peu mince comme façon de faire, non ?

j'écris un cookie avec le password du type lors de sa 1ere visite, et
ensuite je compare au vrai mot de passe, et là je dois écrire en
javascript le css du style "censure" : soit visible soit pas



si tu vérifies le pass c'est que tu le fais côté serveur
tu caches donc côté serveur
en n'écrivant pas ce que tu veux ne pas montrer

ça jle fais sur chaque page ?



Le moyen de faire autrement ?
Au lieu d'un cookie, pour les pages suivantes tu peux faire transiter
une variable ( url?montre=0 ) mais ça revient un peu au même en moins bon.

Le mieux n'est-ce point la session ? (côté serveur)


--
sm