2013-05-27 12 views
6

Possiamo gestire clic e fare doppio clic su eventi come di seguito:Come gestire click lungo e gli eventi del tasto destro in Backbone JS

events: { 
    "click .tree-toggler": "toggletree", 
    "dblclick .doubleclick" : "doubleclickFunc" 
    }, 

toggletree: function(e){ 
    //code 
    }, 
    doubleclickFunc : function(e){ 
     //code 
    } 

Ma voglio gestire destra evento click e l'evento Click lungo. Come gestirli?

+0

Suppongo che non sia definito alcun evento "longclick", quindi sarà necessario scrivere un gestore di eventi personalizzato che può essere creato utilizzando gli eventi mouse e mouseup in combinazione. Per quanto riguarda il clic destro, dai un'occhiata a [questo] (http://stackoverflow.com/questions/4235426/how-can-i-capture-the-right-click-event-in-javascript) – Phoenix

+0

@Phoenix - Sì, ho cercato il documento e tanti siti ma non sono riuscito a trovare l'evento longclick. Devo scrivere un gestore di eventi personalizzato. – Cindrella

+0

Dai un'occhiata al sesto esempio nella ['$ .on() pagina di riferimento] (http://api.jquery.com/on/) – Phoenix

risposta

12

Non so l'evento "clic lungo" (non sapevo nemmeno che ce ne fosse uno e non riesco a trovare alcun documento su di esso), ma comunque. Backbone utilizza il metodo on di jQuery per associare i tuoi eventi al DOM. Ciò significa che tutto ciò che funziona con on funzionerà con Backbone.View.events (purtroppo ci sono alcuni limiti al selettore specificato, ma a parte quello).

Prova:

events: { 
    contextmenu: 'onRightClick' 
}, 
onRightClick: function() { 
    alert('it works!'); 
} 
+3

assicurati di chiamare event.preventDefault() per interrompere il menu di scelta rapida da spuntare! – jakee

+0

@jakee dipende da cosa vuole fare, quindi preferirei non dire nulla e considerare che OP sa cosa sta facendo comunque :) – Loamhoof

+0

L'evento del tasto destro funziona perfettamente. +1 per l'evento clic destro. – Cindrella

4

È possibile utilizzare l'evento contextmenu di rilevare clic destro come descritto nella precedente risposta. Un altro modo per rilevare clic per il tasto destro del mouse è di jQuery event.which:

clickTree: function(e) { 
    if (event.which === 3) { 
    // handle right clicks 
    this.showtreemenu(e); 
    return; 
    } 
    // handle left clicks 
    this.toggletree(e); 
} 

Per scatti lunghi, alias misura la durata click, utilizzare mouseup e mousedown:

events: { 
    'mousedown .measure-click-duration': 'clickStarted', 
    'mouseup .measure-click-duration': 'clickEnded' 
}, 

clickStarted: function(e) { 
    this.clickStartTime = e.timeStamp; 
}, 

clickEnded: function(e) { 
    var clickDuration = e.timeStamp - this.clickStarted; 
    if (clickDuration > 1000) { 
    this.longClick(e); 
    } 
} 

ho fatto un fiddle dimostrando contextmenu per la destra clic e durata del clic sopra descritta.

+0

+1 per il sommario di Longclick. Funziona perfettamente. – Cindrella

Problemi correlati