Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [JQuery] immediateEventPropagation non mi si stoppa

    Ho questo pezzo di codice che in pratica mi serve a generare una specie di esplora risorse.
    Ad ogni icona devo associare svariati eventi, tipo il click seleziona, il doppio click apre e l'hover mostra un tooltip con informazioni addizionali.

    Solo che per qualche ragione, se faccio doppio click anche se la prima riga dell'handler e' e.stopImmediatePropagation(), alla fine del doppio click mi viene comunque invocato l'evento generato da hoverIntent. Avete idea del perche'? le ho provate tutte, anche ritornando false, facendo unbind di tutti gli altri eventi, ecc., comunque il maledetto hoverIntent viene eseguito. E peraltro il tooltip viene mostrato in un posto del cavolo visto che al doppio click entro nella cartella in cui ho doppio cliccato e quindi l'elemento su cui il dblclick e l'hoverIntend venivano invocati non e' piu' presente.

    Help!!

    Codice PHP:
    function addIconToViews (nameicondroppableactionBoxIdiType) {
        var 
    homeId "#views-home";
        var 
    iconBox = $('<div></div>');
        
    //[...]

        //This action depends on what type of resource the user
        //is double-clicking or single-clicking
        
    switch (iType) {
            case 
    iconType.folder:
                
    iconBox.dblclick(function(e) {
                    
    e.stopImmediatePropagation(); //Stop propagation
                    
    goToFolder (actionBoxId);
                    
    console.log ("Called double click"e);
                });
                
    iconBox.click(function(e) {
                    
    e.stopImmediatePropagation(); //Stop propagation
                   
    $(this).toggleClass('iconSelected');
                   
    generateActionMenu();
                   
    e.preventDefault();
                   
    console.log ("Called click");
                });
                break;
            case 
    iconType.cmap:
                
    iconBox.dblclick(function(e) {
                    
    e.stopImmediatePropagation(); //Stop propagation
                    
    e.preventDefault();
                });
                
    iconBox.click(function(e) {
                   
    e.stopImmediatePropagation(); //Stop propagation
                   
    $(this).toggleClass('iconSelected');
                   
    generateActionMenu();
                });
                break;
        }

        
    iconBox.hoverIntent ({over: function(e) {showActionBox ($(this), actionBoxId); console.log ("Called hover intent"e);}, out: function() {return false}, timeout500interval500sensitivity3});

        
    //[...]
        
    $(homeId).append (iconBox);

    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  2. #2
    Ho risolto, e giusto perche' potrebbe tornare utile a qualcuno, posto qui la spiegazione.

    Con il plugin hoverIntent, un timer viene inizializzato (con setTimer) quando l'evento mouseenter viene rilevato. Poi nel momento in cui il timeout scade, allora la posizione del mouse precedente viene confrontata con quella attuale, e se si differenziano di abbastanza poco, la funzione in over di hoverIntent viene chiamata.

    Anche se l'elemento del DOM a cui l'hoverIntent era associato non e' piu' presente nel DOM, quando scade il timeout, se il mouse punta ancora alla stessa posizione (o ad una molto vicina) allora la funzione in over viene chiamata. Quindi stoppare la propagazione degli eventi al double-click non aveva senso, il mio problema era appunto il timer ancora attivo che quando scadeva, poco dopo il doppio click, mi chiamava la funzione che avevo passato all'hoverIntent.

    Ho risolto mettendo un

    codice:
    $(this).mouseout();
    all'interno della funzione chiamata nel momento del doppio click (quando l'elemento e' ancora presente nel DOM). La mouseout fa si' che hoverIntent "pulisca" il timeout relativo a quell'elemento e mi evita il bug fastidioso che avevo.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.