2010-09-28 14 views
6

W jaki sposób można programowo wyłączyć wyświetlanie siatki od podświetlenia wiersza po najechaniu myszą nad nim? Chcesz to wyłączyć tylko w określonych momentach.jqGrid wyłącz podświetlanie wierszy


Jest to kod z Olega, który pracował:

$('#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"); 
    }); 

Odpowiedz

22

Użyj hoverrows:falseoption.

+0

Mogę to uzyskać pracować, gdy ustawię to w początkowej konfiguracji siatki. Ale jeśli spróbuję ustawić to po początkowym załadowaniu za pomocą '$ (" # list "). SetGridParam ({hoverrows: true});' nowe ustawienie nie wydaje się mieć wpływu. Próbowałem przeładować sieć ('$ (" # list "). Trigger (" reloadGrid ");') po zmianie właściwości, ale to też nie działa. Doktorzy mówią, że to można zmienić .. jakieś pomysły? –

+0

@ Marcus: Masz rację w tabeli na stronie http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options. Myślę, że jest to bardziej błąd w dokumentacji. Niemniej jednak możesz wyłączyć dynamiczne uaktywnianie wierszy ** jeden raz ** w odniesieniu do '$ (" # list "). Unbind (" mouseover "); $ (" # list "). Unbind (" mouseout ");' . Zobacz wersję demonstracyjną na http://www.ok-soft-gmbh.com/jqGrid/Pager.htm (kliknij "Wyłącz wiersz wskaźnika"). Nie można tak łatwo przywrócić stanu początkowego. Aby to przywrócić, musisz powiązać zdarzenia jeszcze raz z odpowiednimi funkcjami (zobacz: grid.base.js linie 2109-2119) – Oleg

+0

@ Marcus: spójrz na http://github.com/tonytomov/jqGrid/blob/master/ js/grid.base.js # L2111 (linie 2111-2121), które będą używane w przypadku 'hoverrows: true' – Oleg

0

Proste wyszukiwanie Google ujawnił tego źródła. http://www.trirand.net/examples/appearance/highlight_on_hover/default.aspx

„Domyślnie, jqGrid hightlight rzędy przy aktywowaniu ta jest kontrolowana przez właściwość AppearanceSettings.HighlightRowsOnHover - ustawienie wartości false spowoduje wyłączenie tej opcji. "

+0

Widziałem to. Nie widziałem żadnego przykładu JavaScriptu, jak ustawić ten obiekt. Wydaje się być kontrolowany w jakiś sposób przez kod .NET .. ?? –

+0

Dziwne. Wygląda jak właściwość . Możesz zobaczyć AppearanceSettings w akcji w kodzie podanym w tym pytaniu: http://stackoverflow.com/questions/2058692/how-to-change-a-specific-rowdata-value-in-a-jqgrid – ChessWhiz

0

Jestem obecnie zastąpienie istniejącej obsługi mouseover z pośrednim funkcji, po prostu wywołuje istniejącej obsługi jeśli siatka jest włączona, tak:

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); 
    } 
}); 

ten sposób nie muszę skopiować jqGrid kod zdarzenia.

Nie podoba mi się użycie mouseover [0] .handler, ale działa na chwilę.