j'ai besoin d'empécher qu'un clique avec SHIFT enfoncé n'ouvre un nouveau
navigateur sous firefox.
sous IE pas de probleme. je retourne false et le shift n'est plus géré, mais
sous firefox, ca m'ouvre a tous les coup un nouveau navigateur.
j'ai vraiment besoin d'un coup de main la !!!
Merci
Etienne
et où faut-il faire cette astuce ?
paske là, moi avec mon FF, je n'arrive pas à reproduire le phénomène.
> sous IE pas de probleme. je retourne false et le shift n'est plus géré, mais
> sous firefox, ca m'ouvre a tous les coup un nouveau navigateur.
tu retournes false à partir de quoi ?
> j'ai vraiment besoin d'un coup de main la !!!
Et si tu précisais un peu ton cas de figure ?
--
Stephane Moriaux et son [moins] vieux Mac
en gros je cherche a refaire la selection multiple de windows sur un page
web pour manipuler des fichiers dans une interface web:
Shift pour selectionner une plage
Control pour ajoutter ou retirer un fichier.
donc je clique sur un fichier, il est selectionné
en appuyant sur shift je clique sur un autre fichier de la liste, et ca
selectionne tous les fichiers... enfin a la windows quoi.
Mais apres, en restant sur shift préssé, je fais mon drag and drop.
et lorsque je drop, evidement j'appelle une page pour prendre en compte le
mouvement de mes fichiers.
et hop cette url est ouverte dans une nouvelle fenetre alors qu'evidement ce
n'est pas du tout le but de la manoeuvre.
en gros. j'aimerai que
<a href='#' onclick='return gourl();'>clic ici</a>
function gourl()
{
window.location.href = 'mapage.php';
return false;
}
n'ouvre pas de nouvelle fenetre si je clique sur "clic ici" avec la touche
shift préssé.
dans la foule, faudrait que ca n'ouvre pas non plus de tab si c'est control
qui est préssé.
Etienne
[...]
> en gros. j'aimerai que
>
> <a href='#' onclick='return gourl();'>clic ici</a>
>
> function gourl()
> {
> window.location.href = 'mapage.php';
> return false;
> }
>
> n'ouvre pas de nouvelle fenetre si je clique sur "clic ici" avec la touche
> shift préssé.
scrognegneu !
mais j'en étais resté avec l'habitude du clic-droit et son menu
jamais je n'ai utilisé cette facilité :-(
Grâve problème :
================
à ce qu'il semble
seul IE (windows only I expect) est capable de
detecter les event sur les touches shif alt control :
http://fr.selfhtml.org/javascript/objets/event.htm#alt_ctrl_shift_key
et j'imagine que çà va pas être fastoche de détourner ces touches avec FF
à moins que ?
http://xulfr.org/xulplanet/xultu/xblevents.html
hehe.
bon ben de mon coté, j'ai résolu mon probleme en remplacant les balises A
par des balises B.
du coup, plus d'ouverture de nouvelle fenetre.
c'est pas l'ideal, mais bon.
Non ce n'est pas vrai, même mon vieux mozilla 1.7.3 y arrive très bien.
http://developer.mozilla.org/en/docs/DOM:event
http://developer.mozilla.org/en/docs/DOM:event.shiftKey
Et pour en etre convaincu :
http://mokhet.com/tests/event_and_shift_alt_ctrl.html
--
laurent
on notera que j'avais pris des pincettes
>> à ce qu'il semble
>> seul IE (windows only I expect) est capable de
>> detecter les event sur les touches shif alt control :
>
>
> Non ce n'est pas vrai, même mon vieux mozilla 1.7.3 y arrive très bien.
Bonne nouvelle ! j'en suis ravi.
> http://developer.mozilla.org/en/docs/DOM:event
> http://developer.mozilla.org/en/docs/DOM:event.shiftKey
>
> Et pour en etre convaincu :
> http://mokhet.com/tests/event_and_shift_alt_ctrl.html
Ha ! oui ! ... çà se mérite tt de même ... hein ?
(30 lignes pour remplacer 3 évenements prévus)
J'ai archivé la démo pour essayer d'y comprendre progressivement :-)
Merci
> Ha ! oui ! ... çà se mérite tt de même ... hein ?
> (30 lignes pour remplacer 3 évenements prévus)
Pour être compatible avec IE oui ça se mérite :p
Et encore, cette version de gestion des évènements est une version super
light de ce que j'utilise qui est 10 fois plus gros, la compatibilité ca
prend de la place ehehe.
--
laurent
genial cet exemple.
dommage que ce ne soit pas
shif+clic sur ce lien ouvre le lien dans la fénčtre active !!! :)
Etienne
hum...
c'est long en effet.
moi personnellement j'utilise un truc beaucoup plus simple pour detecter le
shift (meme sous FireFox)!
<div class='carrerouge' onclick='return test_shift(this, event);'>
function test_shift(o, e)
{
var shift = (isFF) ? e.shiftKey : (event.shiftKey);
...
}
voila. evidement isFF est true s'il s'agit de firefox.
Je me demande meme si event.shiftKey ne renvoit pas dans tout les cas de
figure l'etat de la touche shift...
Etienne
si(*) :
<a href="#" onclick="alert(event.shiftKey);">shift ou non ?</a>
avec mon FF, IE, Opera, Safari
iCab gèle le shift à son profit :
ne sert qu'aux sélections et il se moque alors des histoires de liens
Seul mon FF ouvre un popup avec shift+clic sur lien
mais ...
et alors ?
en quoi cela résoud le non popup lors d'un shift+click sur le lien ?
j'ai essyé çà sans succès :
<a href="test.htm"
onclick="if(event.shiftKey){
self.location=this.href;
return false;
}">sobole non ok</a>
qui ouvre bien test.htm dans même fenêtre
mais n'empèche pas le popup simultané
et comme on ne peut faire event.shiftKey = false;
je ne vois pas la soluce.
(*) contrairement à ce que laisse entendre selfhtml.org
qui prétend que c'est IE only
(à ce que j'ai compris)
> et alors ?
> en quoi cela résoud le non popup lors d'un shift+click sur le lien ?
>
> j'ai essyé çà sans succès :
> <a href="test.htm"
> onclick="if(event.shiftKey){
> self.location=this.href;
> return false;
> }">sobole non ok</a>
>
> qui ouvre bien test.htm dans même fenêtre
> mais n'empèche pas le popup simultané
> et comme on ne peut faire event.shiftKey = false;
> je ne vois pas la soluce.
le "return false;" permet d'annuler ce listener d'événement (onclick).
On obtient la même chose en passant par event.preventDefault() (version
DOM) ou event.returnValue = false; (version IE)
Mais puisque shift est appuyé il faut aussi empecher l'événement de se
propager puisque ce n'est alors plus l'événement par défaut qu'on veut
annuler.
pour DOM on empêche la propagation avec event.stopPropagation();
http://developer.mozilla.org/en/docs/DOM:event.stopPropagation
pour IE c'est event.cancelBubble = true;
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/cancelbubble.asp
<a href="refere.html"
onclick="if(event.shiftKey){
self.location=this.href;
try{
event.stopPropagation();
} catch(e) {
event.cancelBubble = true;
}
return false;
}">et la, est-ce que c'est ok ?</a>
--
laurent
oui, oui, c'est ok
reste plus qu'à bosser ces histoires de propagations :-/
> pour DOM on empêche la propagation avec event.stopPropagation();
http://developer.mozilla.org/en/docs/DOM:event.stopPropagation
> pour IE c'est event.cancelBubble = true;
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/cancelbubble.asp
je n'ai pas essayé avec NC4.5 :-)
(à ts les coups il doit bloquer sur 'try' (de mémoire) )