2012-10-23 14 views
5

z powodu problemu ze znalezieniem elementu input w następnym td. Muszę umieścić wartość w klasie td pola tekstowego tblCashSum.Znajdowanie elementu wejściowego następnego TD

Jednakże, jeśli I wykonaj następujące czynności:

alert(formElement.nextAll('td.tblCashSum').find('input.cashSum').val()); 

Odczytuje niezdefiniowane.

HTML:

<tr> 
    <td class='tblCashType'>100</td> 
    <td class='tblCashAmount'><asp:TextBox class="inputBox" ID="noteAmount100" runat="server"></asp:TextBox></td> 
    <td class='tblCashSum'><asp:TextBox class="inputBoxDisabled cashSum" ReadOnly="true" runat="server" ID="cashSum100"></asp:TextBox></td> 
</tr> 

Jquery:

$("noteAmount").blur(function(){ 
calc($(this)); 
}); 

function calc(formElement) 
{ 
    a = formElement.val(); 
    b = formElement.closest('td').siblings('td.tblCashType').text(); 
    x = a * b; 
    formElement.nextAll('td.tblCashSum').find('input.cashSum').val(x); 
} 
+1

jest '$ ("noteAmount")' poprawna? - jest 'calc ($ (this) .val());' correct? lub czy ma to być 'calc ($ (this)); –

+0

tak, popełniłem błąd, ale funkcja calc nadal nie działa :( – goingsideways

Odpowiedz

6

są przechodzącą ciąg, który jest wartość elementu wejściowego, należy najpierw przekazać obiekt zamiast pamiętać, że brakowało # dla selektora identyfikatora.

$("#noteAmount").blur(function(){ 
    calc($(this)); 
}); 

Następnie można użyć parent i next metody:

function calc($formElement) { 
    a = parseInt($formElement.val(), 10); 
    b = parseInt($formElement.closest('td').siblings('td.tblCashType').text(), 10); 
    x = a * b; 
    $formElement.parent().next().find('input.cashSum').val(x); 
} 

Należy pamiętać, że jeśli elementy mają ID atrybutów można je wybrać bezpośrednio, które jest szybsze niż przejeżdżające DOM.


nie mogę znaleźć element z ID noteAmount w znacznikach, jeśli masz wiele elementów o tych samych identyfikatorów Twój znaczników staje się nieważny, a otrzymasz nieoczekiwane rezultaty, można również spróbować następujących :

$('.inputBox').blur(function(){ 
    a = this.value 
    $this = $(this); 
    b = $this.parent().prev().text(); 
    x = parseInt(a, 10) * parseInt(b, 10); 
    $this.parent().next().find('input.cashSum').val(x); 
}); 
+2

Podoba mi się schemat nazewnictwa' $ formElement' dla obiektów jQuery – nrodic

+0

popełniłem błąd, tylko przekazuję przedmiot, a nie wartość, zmieniłem pytanie, przepraszam – goingsideways

+0

Niceone nieokreślone, włączę parseInt również bardzo, bardzo miło, dziękuję – goingsideways

1

trzeba użyć .next() na .parent() wejścia

Spróbuj formElement.closest('td').next('td.tblCashSum')

LUB

formElement.parent().next('td.tblCashSum') 

//

także $("noteAmount") nie ma żadnego sensu ... ma być $('[id*="noteAmount"]')

$('[id*="noteAmount"]').blur(function(){ 
calc($(this)); 
}); 

function calc(formElement) 
{ 
    a = formElement.val(); 
    b = formElement.closest('td').siblings('td.tblCashType').text(); 
    x = a * b; 
    formElement.closest('td').next('td.tblCashSum').find('input.cashSum').val(x); 
} 
+0

Popełniłem błąd , I tylko przekazać obiekt, a nie wartość. Zmieniono pytanie.Trudno – goingsideways

+2

Musisz użyć .next() na .parent() wejścia –

Powiązane problemy