2010-09-28 17 views
6

Come disattivare la griglia in modo programmatico dall'evidenziazione di una riga quando si passa sopra con il mouse? Cercando di disabilitare questo solo in determinati momenti.jqGrid disabilitazione evidenziazione riga


Questo è il codice da Oleg, che ha funzionato:

$('#result-close').click(function() { 
     //Turn off hover highlighting 
     $("#list").unbind('mouseover'); 
     $("#list").unbind('mouseout'); 

     //Highlight row      
     $("#" + selid).effect("highlight", {}, 5000); 

     //Turn on hover highlighting 
     setTimeout(function(){ 
        $("#list").bind('mouseover',function(e) { 
         ptr = $(e.target).closest("tr.jqgrow"); 
         if($(ptr).attr("class") !== "subgrid") { 
          $(ptr).addClass("ui-state-hover"); 
         } 
         return false; 
        }).bind('mouseout',function(e) { 
         ptr = $(e.target).closest("tr.jqgrow"); 
         $(ptr).removeClass("ui-state-hover"); 
         return false; 
        }); 
     }, 2000);   

     $('#dialog').dialog("close"); 
    }); 

risposta

22

Utilizzare hoverrows:falseoption.

+0

Posso ottenere questo lavorare quando ho impostato questo nella configurazione iniziale della griglia. Ma se provo ad impostare questo dopo il caricamento iniziale usando '$ (" # lista "). SetGridParam ({hoverrows: true});' la nuova impostazione non sembra aver effetto. Ho provato a ricaricare la griglia ('$ (" # lista "). Trigger (" reloadGrid ");') dopo aver cambiato la proprietà, ma questo non sembrava funzionare. I documenti dicono che questo può essere cambiato ... qualche idea? –

+0

@Marcus: hai ragione nella tabella sulla pagina http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options. Penso che sia più un errore nella documentazione. Tuttavia è possibile disattivare il passaggio delle righe dinamicamente ** una volta ** rispetto a '$ (" # elenco "). Unbind ('mouseover'); $ (" # lista "). Unbind ('mouseout');' . Guarda la demo su http://www.ok-soft-gmbh.com/jqGrid/Pager.htm (fai clic su "Disabilita le righe al passaggio del mouse"). Non è possibile ripristinare così facilmente lo stato iniziale. Per ripristinarlo devi associare gli eventi ancora una volta alle funzioni corrispondenti (vedi le linee grid.base.js 2109-2119) – Oleg

+0

@Marcus: guarda http://github.com/tonytomov/jqGrid/blob/master/ js/grid.base.js # L2111 (righe 2111-2121) che sarà usato in caso di 'hoverrows: true' – Oleg

0

Una semplice ricerca su Google ha rivelato questa fonte:. http://www.trirand.net/examples/appearance/highlight_on_hover/default.aspx

"Per impostazione predefinita, jqGrid righe evidenziata sul passaggio del mouse Questo è controllata da la proprietà AppearanceSettings.HighlightRowsOnHover - impostandola su false la disabiliterà. "

+0

Visto questo. Non ho visto alcun esempio di JavaScript su come impostare quell'oggetto. Sembra essere controllato in qualche modo dal codice .NET .. ?? –

+0

Strano. Sembra una proprietà di . Puoi vedere AppearanceSettings in azione nel codice fornito in questa domanda: http://stackoverflow.com/questions/2058692/how-to-change-a-specific-rowdata-value-in-a-jqgrid – ChessWhiz

0

Attualmente sto sostituendo il gestore mouseover esistente con una funzione intermedia che appena chiama il gestore esistente se la griglia è attivato, in questo modo:

var enabled = true; 
var jqe = jQuery("#grid"); 
var mouseover = jqe.data('events').mouseover[0].handler; 
jqe.unbind('mouseover'); 
jqe.bind('mouseover', function() { 
    if (enabled) { 
     mouseover.apply(this, arguments); 
    } 
}); 

In questo modo non devo copiare il jqGrid codice evento.

Non mi piace l'uso di mouseover [0] .handler, ma funziona per il momento.

Problemi correlati