Sembra che l'evento Sfocatura interrompa il funzionamento del gestore eventi click? Ho una casella combinata in cui le opzioni compaiono solo quando il campo di testo è attivo. La scelta di un collegamento opzione dovrebbe causare un evento.L'evento di sfocatura interrompe il funzionamento dell'evento click?
Ho un esempio violino qui: http://jsfiddle.net/uXq5p/6/
di riprodursi:
- Selezionare la casella di testo
- I collegamenti vengono visualizzati
- Fare clic su un collegamento
- La sfocatura si verifica anche ed i collegamenti scompare
- nient'altro accade.
Comportamento previsto:
Sul punto 5, dopo il verificarsi sfocatura, lo scatto anche dovrebbe anche allora il fuoco. Come posso farlo?
UPDATE:
Dopo aver giocato con questo per un po ', sembra che qualcuno ha fatto di tutto per evitare un già-verificato clicca evento da essere gestito se un evento di sfocatura rende l'elemento cliccato Un- cliccabile.
Ad esempio:
$('#ShippingGroupListWrapper').css('left','-20px');
funziona bene, ma
$('#ShippingGroupListWrapper').css('left','-2000px');
impedisce l'evento click.
Questo sembra essere un bug in Firefox, dal momento che rendere un elemento non-cliccabile dovrebbe impedire futuri clic, ma non annullare quelli già verificatisi quando potrebbe essere cliccato.
Altre cose che impediscono l'evento click dalla lavorazione:
$('#ShippingGroupListWrapper').css('z-index','-20');
$('#ShippingGroupListWrapper').css('display','none');
$('#ShippingGroupListWrapper').css('visibility','hidden');
$('#ShippingGroupListWrapper').css('opacity','.5');
ho trovato un paio di altre domande su questo sito che stanno avendo problemi simili. Sembrano esserci due soluzioni fluttuanti:
Utilizzare un ritardo. Questo è negativo perché crea una condizione di competizione tra il gestore di eventi occulti e il clic. È anche sciatto.
Utilizzare l'evento
mousedown
. Ma questa non è una grande soluzione dal momento checlick
è l'evento corretto per un collegamento. Il comportamento dimousedown
è contro-intuitivo da una prospettiva UX, in particolare dal momento che non è possibile annullare il clic spostando il mouse dall'elemento prima di rilasciare il pulsante.
Posso pensare a qualche altro.
3.Use mouseover
e mouseout
sul link per abilitare/disabilitare l'evento sfocatura per il campo. Questo non funziona con la tabulazione della tastiera poiché il mouse non è coinvolto.
4. La soluzione migliore sarebbe qualcosa di simile:
$('#ShippingGroup').blur(function()
{
if($(document.activeElement) == $('.ShippingGroupLinkList'))
return; // The element that now has focus is a link, do nothing
$('#ShippingGroupListWrapper').css('display','none'); // hide it.
}
Purtroppo, $(document.activeElement)
sembra tornare sempre l'elemento del corpo, non è quello che è stato fatto clic. Ma forse se ci fosse un modo affidabile per sapere 1. quale elemento ha ora focus o due, quale elemento ha causato la sfocatura (non quale elemento è sfocato) dall'interno del gestore di sfocatura. Inoltre, c'è qualche altro evento (oltre allo mousedown
) che spara prima della sfocatura?
Il problema è la sfocatura evento sta sparando prima del click. Poiché la sfocatura nasconde quegli elementi, non si fa clic su nulla. – vcsjones
Non sono sicuro che il problema sia nascosto. Ho provato a impostare l'opacità al 50% invece di nasconderli e l'evento click non si verifica ancora. Si prega di consultare jsfiddle.net/75sgt/1 – Nick
Dopo un'ulteriore sperimentazione, è la nuova inattaccabilità che rende "non cliccabile" retroattivamente un elemento già cliccato. Vedi il mio aggiornamento sopra. – Nick