在下一个input
中找不到td
元素时遇到问题。我需要在tblCashSum的文本框的td类中添加一个值。
但是,如果我执行以下操作:
alert(formElement.nextAll('td.tblCashSum').find('input.cashSum').val());
它读取未定义。
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);
}
答案 0 :(得分:6)
您传递的是一个输入元素值的字符串,您应首先传递该对象,请注意您错过了ID选择器的#
。
$("#noteAmount").blur(function(){
calc($(this));
});
然后您可以使用parent
和next
方法:
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);
}
请注意,如果您的元素具有ID属性,您可以直接选择它们,这比遍历DOM更快。
我在您的标记中找不到ID为 noteAmount 的元素,如果您有多个具有相同ID的元素,您的标记将变为无效并且您将获得意外结果,您也可以尝试以下内容:
$('.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);
});
答案 1 :(得分:1)
您需要在.next()
输入
.parent()
尝试formElement.closest('td').next('td.tblCashSum')
OR
formElement.parent().next('td.tblCashSum')
//
同样$("noteAmount")
没有任何意义......
假设是$('[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);
}