0

我有个问题。我可以动态创建多行。每行有 2 个<td>。每个<td>都有类,tdDebit并且tdCredit.

<table id="tblAcctForm">
 <tr>
  <td class="tdDebit"><input type="text" /></td>
  <td class="tdCredit"><input type="text" /></td>
 </tr>
</table>

我想要发生的是,当我在一个<td>类中输入一个输入时,tdDebit或者tdCredit同一行上的另一个输入将被禁用。发生的情况是,当我在<td>with 类中的输入上键入某些内容tdDebittdCredit所有输入都被禁用时。我只想要在我输入的同一行上输入。

$(document).ready(function () {
  $("tr .tdDebit input").live("keyup", function()  {
    checkContent(this, "tr .tdCredit input");
  });

  $("tr .tdCredit input").live("keyup", function()  {
    checkContent(this, "tr .tdDebit input");
  });
});

function checkContent (activeElem, otherElem) {
  if ($.trim($(activeElem).val()) != "")
    $(otherElem).attr("disabled", "disabled");
   else
    $(otherElem).removeAttr("disabled");
}

请在此处查看我的工作代码:http: //jsfiddle.net/pcmwg/

PS:在测试之前创建多行。

请帮忙。提前致谢。

4

3 回答 3

1

您传递给otherElem参数的值过于笼统:它选择页面上所有 tr 中所有 .tdDebit/.tdCredit 中的所有输入。

相反,将相对于输入元素的直接值传递给它:

$(document).ready(function () {
  $("tr .tdDebit input").live("keyup", function()  {
    var toDisable = $(this).closest('tr').find('.tdCredit input');
    checkContent(this, toDisable);
  });

  $("tr .tdCredit input").live("keyup", function()  {
    var toDisable = $(this).closest('tr').find('.tdDebit input');
    checkContent(this, toDisable);
  });
});

更好的是,让它更通用:

$(document).ready(function () {
    $("tr input").live("keyup", function()  {
    var toDisable = $(this).closest('tr').find('input').not(this);
    checkContent(this, toDisable);
  });
});

http://jsfiddle.net/7jdfM/1/

于 2012-12-31T02:58:31.073 回答
1
checkContent(this, $(this).siblings(".tdCredit input"));
checkContent(this, $(this).siblings(".tdDebit input"));
于 2012-12-31T02:58:54.897 回答
1

这样就可以了..不再需要第二个参数

function checkContent (activeElem, otherElem) {
    var $input=$(activeElem), $otherInput=$input.parent().next().find('input');
        if ($.trim($input.val()) != "")
            $otherInput.attr("disabled", "disabled");
        else
           $otherInput.removeAttr("disabled");
}

演示:http://jsfiddle.net/pcmwg/1/

于 2012-12-31T03:06:08.367 回答