【问题标题】:Finding the input element of next TD查找下一个 TD 的输入元素
【发布时间】:2012-10-13 22:53:36
【问题描述】:

在下一个td 中找不到input 元素。我需要在 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);
}

【问题讨论】:

  • $("noteAmount") 正确吗? --calc($(this).val()); 正确吗?还是应该是calc($(this));
  • 是的,我在那里犯了一个错误,但函数 calc 仍然不起作用:(

标签: jquery input next


【解决方案1】:

您正在传递一个作为输入元素值的字符串,您应该首先传递对象,注意您错过了 ID 选择器的 #

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

然后你可以使用parentnext 方法:

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);
});

【讨论】:

  • 我喜欢$formElement jQuery 对象的命名方案。
  • 我犯了一个错误,我只传递对象而不传递值。我已经改变了问题。对不起
  • Niceone 未定义。我也会合并 parseInt,非常好。谢谢!
【解决方案2】:

你需要在输入的.parent()上使用.next()

试试formElement.closest('td').next('td.tblCashSum')

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);
}

【讨论】:

  • 我犯了一个错误,我只传递对象而不传递值。我已经改变了问题。对不起
  • 你需要在 input 的 .parent() 上使用 .next()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2013-05-29
  • 1970-01-01
  • 2017-08-08
  • 2023-03-25
  • 2017-10-16
  • 2023-03-09
相关资源
最近更新 更多