2013-05-14 12 views
15

Pracuję nad aplikacją asp.net mvc 3. Buduję tabelę dynamicznie z danymi z bazy danych. Mam pewną sprawę, gdy trzecia kolumna/komórka z rzędu jest rozwijana:Wybierz następny <td> w tabeli, używając jQuery

<select name="YesNoNotApplicable" class="YesNoNotApplicable"> 
          <option value="1">Yes</option> 
          <option value="2">No</option> 
          <option value="3">Not Applicable</option> 
         </select> 

W tym przypadku czwarta kolumna/komórka pozostaje pusta, a jeśli użytkownik wybierz 3 (nie dotyczy) w czwartym komórka powinna pokaż pole tekstowe, w którym użytkownik może wpisać dodatkowe informacje. Mam słabą wiedzę w JS i jQuery, więc mogę się dowiedzieć, jak uzyskać wybranej wartości z listy rozwijanej:

$(document).ready(function() { 
     $('.YesNoNotApplicable').change(function() { 
      alert($('.YesNoNotApplicable').val()); 
     }); 
    }); 

ale teraz zamiast wpisu muszę sprawdzić, czy wartość jest 3 (jest to daleko I można przejść samemu) i pokazać/ukryć lub dołączyć/usunąć pole tekstowe z następnej komórki lub jeśli porozmawiamy w domenie Prespective.

Jak mogę przejść do następnego z klasą = YesNoNotApplicable i jaki jest najlepszy sposób na zajęcie się tym polem tekstowym - aby umieścić go w trakcie tworzenia tabeli, a następnie pokazać/ukryć lub radzić sobie z nim w czasie wykonywania i dołączać/usuwać go i jak mogę to zrobić?

+0

Zastosowanie [.next()] (http://api.jquery.com/next/) lub [.closest()] (http://api.jquery.com/closest/)? – naththedeveloper

Odpowiedz

40

Jeśli używasz silnie wpisanego modelu i pomocników html dla swojego widoku, prawdopodobnie lepiej będzie utworzyć element wejściowy podczas tworzenia tabeli. Powodem jest to, że elementy, które tworzysz za pośrednictwem jQuery, nie będą związane z twoim modelem.

$(document).ready(function() { 
    $('.YesNoNotApplicable').change(function() { 
     if($(this).val() === "3") 
     $(this).closest('td').next('td').find('input').show(); 
    }); 
}); 
+0

Tak, używam mocno napisanego modelu i potrzebuję tego, aby był związany z moim modelem. Sugestia to gwarantuje, prawda? – Leron

+0

Tak, jeśli używasz metody rozszerzenia @ Html.TextBoxFor() dla danych wejściowych. Będzie związany z twoim modelem. –

+0

+1 za obejrzenie większego zdjęcia –

11

W ramach wywołania zwrotnego będzie się odwoływać do elementu . Więc można znaleźć td zawierające go closest, a potem następny td poprzez next (od wiesz następną rzeczą jest td, jest to tabela), podobnie jak to:

var $nextTD = $(this).closest('td').next(); 

w bardziej W ogólnym przypadku, gdy chcesz zrobić coś podobnego, ale nie w tabeli, a rodzeństwo, którego chcesz znaleźć, może znajdować się w odległości większej niż jeden element, możesz użyć nextAll("selector").first(). Ale jeśli to, czego chcesz, to kolejny element i jesteś tego pewien, nie potrzebujesz nextAll.

+1

+1. Ha, udało mi się zapewnić dobrze zorganizowaną odpowiedź w czasie, gdy zajęło mi dodać komentarz ... dobrze zrobione sir – naththedeveloper

+0

Dzięki, wiele przydatnych informacji. – Leron

2
$(document).ready(function() { 
    $('.YesNoNotApplicable').change(function() { 
     if($(this).val() === "3"){ 
     $(this).closest('td').next('td').find('input:text').show(); 
     } 
    }); 
}); 
0

var nextCell = $(this).closest('td').next();

I można następnie pracować z następnym CEL.

+0

Najlepiej usuwać odpowiedzi, gdy widzisz, że po prostu powtarzasz wcześniejszy. –

+0

Nie widziałem, że byłem w swoim telefonie i pisałem znacznie wolniej niż pierwsza odpowiedź. – sergioadh

Powiązane problemy