2014-05-07 9 views
6

Ho JSFiddle con una scatola ridimensionabile. Quando si fa doppio clic in un punto qualsiasi del documento, il colore della casella passa da beige a rosso.Perché viene visualizzata una voce nel gestore dblclick quando non è stato emesso il doppio clic?

Il problema è che a volte quando si rilascia il pulsante sinistro del mouse dopo il ridimensionamento della casella, viene generato un evento dblclick e la casella diventa rossa. E a volte è possibile rilasciare il pulsante del mouse senza cambiare il colore della scatola, ma se si fa clic una sola volta nella casella si genera il dblclick e si cambia il colore della scatola.

Di solito, tutto funziona correttamente: ridimensiono e non c'è la voce dblclick. Devo provare forse 20 volte per ottenere un falso evento dblclick.

Sto utilizzando Chrome.

È possibile risolvere parzialmente questa particolare istanza del problema aggiungendo codice al gestore dblclick per ignorare la voce se è in corso un ridimensionamento. Ciò non risolve comunque la voce dblclick, che accade (molto raramente) quando ridimensiono, non ottieni dblclick, ma ottengo uno dblclik quando faccio clic una volta sola nella casella.

Ma invece di far funzionare qui JSFiddle, quello che sto cercando qui è la ragione per cui viene generato questo dblclick. Sto usando l'evento dblclick in modo errato? C'è un bug noto con questo evento e forse una soluzione migliore? C'è qualche tipo di rimbalzo dell'interruttore in corso con il pulsante del mouse?

$(function() { 
    $("#box").resizable(); 
    $(document).dblclick(function(e){ 
     console.log("double-clicked on ", e.target); 
     $("#box").toggleClass("red"); 
    }); 
}); 
+0

Sono stato in grado di riprodurlo solo se ho fatto doppio clic quando il secondo clic è in fase di ridimensionamento e sto anche utilizzando Chrome. –

+1

Questo errore di cui stai parlando non viene visualizzato. – Muath

+0

Funziona bene su Mac (Safari, Firefox e Chrome). –

risposta

0

Prova di questo codice:

$('#test').dblclick(function(e){ 
if(!$(e.target).is('.ui-resizable-handle')) 
    $(this).toggleClass('selected'); 
    }).resizable(); 

fiddle

+0

Sì, potrei fare l'azione dblclick solo se il dblclick NON era su un handle ridimensionabile. Ma quello che sto cercando è perché il dblclick viene anche generato quando ridimensioni qualcosa. – Steve

0

ho provato in cromo troppo e funziona bene per me ... non fa scattare se si sceglie troppo vicino a un doppio click, come l'evento non si attiva in quanto dosent riconosce il dbclick mentre si fa clic troppo velocemente. Questa è la migliore risposta che posso dare. A volte ho qualche problema con il mio mouse, se non clicco troppo non registra un clic del mouse ... ma il mio mouse è piuttosto vecchio, non sono sicuro che il tuo mouse funzioni perfettamente: P

2

Può essere correlato a il tuo hardware, suppongo che sia influenzato anche dall'impostazione del "doppio clic sul ritardo" del tuo sistema.

Utilizzando Firefox, se faccio ripetutamente clic su & trascinamento con piccoli movimenti di chiusura, faccio scattare l'evento dblclick e direi che è un comportamento normale. Non vedo però dblclicks che spuntano dal nulla con 5 secondi di click distanziati.

che consente di monitorare una possibile causa per il bug, tenta di accedere anche i mousedown e mouseup eventi:

$(document).mousedown(function(e){ 
    console.log(" mousedown on ", e.target); 
}); 
$(document).mouseup(function(e){ 
    console.log(" mouseup on ", e.target); 
}); 

fiddle

+0

Non penso che quello che sto vedendo sia un comportamento normale. Posso fare clic, trascinare, reszie, ecc. (Che funzionano tutti bene) e poi forse 3 secondi dopo il clic successivo è un dblclick. Sembra che il sistema stia memorizzando una delle operazioni precedenti come un primo clic. Sto usando un sacco di jQuery, quindi forse c'è un bug lì dentro. – Steve

0

è necessario smettere di fare clic su gestore per maniglie di ridimensionamento utilizzando stopPropagation. Aggiornato il jsfiddle e testato.

$(function() { 
    $("#box").resizable(); 
    $(".ui-resizable-handle").dblclick(function(ev){ 
    ev.stopPropagation(); 
    }) 
    $(document).dblclick(function(e){ 
     console.log("double-clicked on ", e.target); 
     $("#box").toggleClass("red"); 
    }); 

}); 
Problemi correlati