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 jqGrid

Ponieważ # 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!

questionAnswers(1)

yourAnswerToTheQuestion