2015-08-25 5 views
7

In a Handstable, quando si fa clic su un'intestazione di colonna, vengono selezionate tutte le celle di tale colonna. È un modo per evitare che ciò accada?Prevenire la selezione di celle Handsontable nell'intestazione di colonna, fare clic su

Non penso che ci sia una tale opzione nella documentazione. Non ho trovato dove gli eventi sono registrati sul DOM all'interno del codice sorgente della stessa libreria Handstable.

Qualsiasi suggerimento sarebbe apprezzato. Grazie.

risposta

7

È possibile interrompere l'evento dalla propagazione utilizzando il gancio beforeOnCellMouseDown, che impedisce alle celle della colonna intestazione che è stato fatto clic da selezionare:

/** 
* @param {MouseEvent} event 
* @param {WalkontableCellCoords} coords 
* @param {Element} element 
*/ 
var handleHotBeforeOnCellMouseDown = function(event, coords, element) { 
    if (coords.row < 0) { 
    event.stopImmediatePropagation(); 
    } 
}; 

Handsontable.hooks.add('beforeOnCellMouseDown', 
    handleHotBeforeOnCellMouseDown, handsontable); 

Un grazie speciale a Gustavo per il suo aiuto!

+0

'stopPropogation' può essere una scelta migliore in alcuni casi (vedi http://stackoverflow.com/questions/5299740/jquery-stoppropagation-vs-stopimmediatepropagation) –

+1

Questo non funziona per me in 0.18. L'evento si attiva, ma chiamare stopImmediatePropagation() non impedisce le selezioni di celle – Eric

+0

Lo stesso problema di @Eric – Petah

3

Non credo sia possibile prevenire questo comportamento. Non ho trovato alcun indizio né nella documentazione né rapidamente ispezionando il codice sorgente.

Tuttavia, è possibile deselezionare le celle selezionate subito dopo essere state selezionate. Legare una funzione per gestire l'evento click cella farebbe il trucco. Si potrebbe fare che o registrando la richiamata quando si crea un'istanza vostro handsontable:

$('#my_handsontable').handsontable({ 
    ... 
    afterOnCellMouseDown: function(event, coords){ 
     // 'coords.row < 0' because we only want to handle clicks on the header row 
     if (coords.row < 0){ 
      $('#my_handsontable').handsontable('deselectCell'); 
     } 
    }, 
    ... 
}); 

o tramite un gancio:

Handsontable.hooks.add('afterOnCellMouseDown', function(event, coords){ 
    if (coords.row < 0){ 
     $('#my_handsontable').handsontable('deselectCell'); 
    } 
}); 

In alternativa, è possibile modificare il codice sorgente handsontable e commentare il pezzo di codice walkontableConfig che fa selezionare l'intera colonna quando viene cliccato una cella di intestazione:

var walkontableConfig = { 
    ... 
    onCellMouseDown: function (event, coords, TD, wt) { 
     ... 
     // if (coords.row < 0) { 
     // instance.selectCell(0, coords.col, instance.countRows() - 1, coords.col); 
     // instance.selection.setSelectedHeaders(false, true); 
     // } 
     ... 
    }, 
    ... 
}; 
+0

Mmm, dovrò provare questo, ma suppongo che non funzionerà per me dato che sto già collegando "selezione cella". Fa anche cose asincrone, quindi fare "unselection" subito dopo può avere un comportamento scorretto. Farò sicuramente un tentativo e riferire. Grazie mille per aver risposto. –

+0

In alternativa, è possibile modificare l'origine del comando per rimuovere quel comportamento. Vedi la mia risposta di modifica sopra. Personalmente, non mi piace modificare le librerie di terze parti in quanto ciò aggiunge complessità aggiuntiva durante l'aggiornamento di tali librerie, ma in alcuni casi potrebbe essere l'unica soluzione. –

+0

Sì, non mi piace fare questo, ma hey, questo potrebbe essere un bel contributo se mai andrò così lontano: rendilo opzionale. Grazie per i suggerimenti. –

Problemi correlati