jQuery - jqGrid - wysyłaj przyciski w każdym wierszu
Używanie jqGrid 4.5.2 i jQuery 1.9.1. Mam jqGrid na stronie internetowej, która wyświetla wiersze danych zwróconych z zapytania. Każdy wiersz w siatce będzie miał 2submit
przyciski, które domyślnie są wyłączone, ale stają się włączone w obrębieonSelectRow
zdarzenie jqGrid.
Dodaję przyciski w poniższym kodzie:
var ids = $("#myGrid").jqGrid("getDataIDs");
for (var i=0;i < ids.length;i++) {
var cl = ids[i];
sm = "<input id='resendMsg' style='height:25px;width:65px;' type='submit' value='Re-Send' disabled='true' />";
ca = "<input id='cancelMsg' style='height:25px;width:55px;' type='submit' value='Cancel' disabled='true' />";
$("#myGrid").jqGrid("setRowData",ids[i], {msgAct:sm+ca});
}
Pamiętaj, żesubmit
pojawiają się przyciskiwyłączone domyślnie.
Po wybraniu wiersza w siatce chcę mieć dwa przyciskitylko dla tego rzędu byćenabled
. Również odbywa się wonSelectRow
zdarzenie to miejsce, w którym ustawiam zmienne do późniejszego użycia.
var gridRow = $(this).jqGrid("getRowData",id);
var srow = $(this).jqGrid("getGridParam","selrow");
Inne zachowanie, w którym chcęonSelectRow
-
Nie chcesz mieć możliwości kliknięcia w wiersz - jeden z 2 przycisków przesyłania musi zostać kliknięty, aby przejść do innego wiersza w siatce. Jeden z nich wykonuje jeden zestaw akcji, a następnie resetuje siatkę (nic nie jest zaznaczone i wszystkie przyciski na wszystkich wierszach są wyłączone).
Inny przycisk przesyłania (aCancel
przycisk) nie wykonuje czynności w poprzednim kroku, ale resetuje siatkę (nic nie jest zaznaczone i wszystkie przyciski na wszystkich wierszach są wyłączone).
Próbowałem różnych rzeczy, aby włączyć przyciski w wybranym wierszu, ale włącza tylko pierwszy wiersz, wszystkie wiersze lub brak wierszy. Spojrzałem na wartość wsrow
powyżej i może potwierdzić, że ma poprawny identyfikator dla wiersza.
Jak kierować przyciski wysyłania w wybranym wierszu, aby je włączyć (i aby wszystkie pozostałe przyciski w siatce były wyłączone)?
Dzięki!
EDYTOWAĆ:
Dzięki @Oleg i jego sugestiom i kontynuacjom udało mi się rozwiązać moje pytanie. Odpowiedzi @ Olega wprowadziły mnie na właściwy tor.
wcolModel
WłożyłemmsgAct
aby uzyskać przyciski w każdym rzędzie i powiązane z tym rzędem.
{name: "msgAct",
width: col4width,
align: "center",
formatter: function() {
return "<input name='resendMsg' style='height:25px;width:65px;' type='submit' value='Re-Send' disabled='disabled' />" +
"<input name='cancelMsg' style='height:25px;width:55px;' type='submit' value='Cancel' disabled='disabled' />"
}}
wOnSelectRow
, Użyłem także jego sugestii, aby wyłączyćwszystko przyciski w jqGrid i włącz te w wierszu, który wybrałem.
// disable all resendMsg & cancelMsg buttons in the grid
$(this).find("input[name=resendMsg]").attr("disabled","disabled");
$(this).find("input[name=cancelMsg]").attr("disabled", "disabled");
// now enable the buttons for the current row only
$(tr).find("input[name=resendMsg]").removeAttr("disabled");
$(tr).find("input[name=cancelMsg]").removeAttr("disabled");
Miałem też inny kod, aby wyłączyć wszystkie inne listy rozwijane na stronie, tak aby mogła się zdarzyć tylko jedna z trzech rzeczy:
użytkownik może kliknąć przycisk Wyślij ponownieużytkownik może kliknąć przycisk Anulujużytkownik może kliknąć inny wiersz na jqGridPonieważ # 3 powyżej wywoła innyOnSelectRow
wydarzenie, chciałem, żeby użytkownik musiał to zrobićcoś z wybranym wierszem.
Korzystając z sugestii @ Oleg, aby wyłączyć wszystkie, a następnie włączyć tylko wybrane przyciski wiersza, umieściłem kod zdarzenia kliknięcia dla każdego z nich wonSelectRow
zdarzenie.
$(tr).find("input[name=cancelMsg]").click(function() {
// disable all resendMsg & cancelMsg buttons in the grid
$(this).find("input[name=resendMsg]").attr("disabled","disabled");
$(this).find("input[name=cancelMsg]").attr("disabled", "disabled");
....do other stuff .....
ReloadGrid();
});
$(tr).find("input[name=resendMsg]").click(function() {
ReSend(gridRow.Col1, gridRow.Col2);
// disable all resendMsg & cancelMsg buttons in the grid
$(this).find("input[name=resendMsg]").attr("disabled","disabled");
$(this).find("input[name=cancelMsg]").attr("disabled", "disabled");
.... do other stuff ....
});
},
Siatka robi teraz to, co chcę. Na przykład -
Gdy siatka ładuje się, wszystkie wiersze w siatce mają kolumnę msgAct, a ta kolumna zawiera w sobie przycisk Wyślij ponownie i Anuluj, z których oba są obecne, ale są wyszarzone.Jeśli wybrano wiersz # 3, przyciski wysyłania i anulowania wiersza nr 3 są teraz aktywne i można je kliknąć. Wszystkie pozostałe wiersze w siatce mają przyciski w tych rzędach, które są nadal wyszarzone.Jeśli użytkownik kliknie Re-Send lub Cancel, nastąpi odpowiednia akcja dla tego wiersza w siatce. Ponownie wyślij dodaje kolejny wiersz do siatki, podczas gdy Anuluj resetuje zaznaczenie, a siatka pojawia się tak, jak po załadowaniu.Jedyne opcje dostępne dla użytkownika to kliknięcie Re-Send, Cancel lub wybranie innego wiersza. Wybór innego wiersza włącza następnie przyciski w tym wierszu (wyłączając te z poprzedniego wyboru), a kliknięcie jednego z nich inicjuje odpowiednie działanie dla tego wiersza.Teraz może być pytanie - czy jest lepszy sposób, aby to zrobić?
Dziękujemy @Oleg za cenną pomoc!