jQuery - 从表中的前一个TD获取隐藏输入的值

时间:2013-06-11 07:10:52

标签: jquery

我有点卡住了,并且在stackoverflow上浏览了很多页面以找到解决方案。

我有一张发票表,您可以在其中动态添加带有输入字段的新TR。 这在第一和第二个输入字段上工作正常。

第一个自动填充输入字段基于客户ID。 但是,第二个自动完成功能基于第一个自动完成选择值,该值将值添加到隐藏的输入字段(ID)。

第二个自动完成工作正常,但我必须得到表格前一个TD中最后一个隐藏输入字段的值。

每个TR行的类是class =“。item-row”。第二个自动完成位于表格的第二个TD中。

我使用以下脚本:

   // Use the .autocomplete() method to compile the list based on input from user
   $(".articleName").autocomplete({
    source: function(request, response) {
    var $itemrow = $(this).closest('tr');
        $.ajax({
            url: "getproducts-test.php",
            dataType: "json",
            data: {
                term: request.term,
                staffid: $itemrow.find('#debiteuren_staffmembers_id').val()
            },
            success: function(data) {
                response(data);
            }
        });
    },
    select: function(event, ui) {
        var $itemrow = $(this).closest('tr');
                // Populate the input fields from the returned values
                $itemrow.find('#articleName').val(ui.item.articleName);
                $itemrow.find('#articleSize').val(ui.item.articleDescription);
                $itemrow.find('#articlePrice').val(ui.item.articlePrice);

                // Give focus to the next input field to recieve input from user
                $('#articleQty').focus();

        return false;
    }
// Format the list menu output of the autocomplete
}).data( "autocomplete" )._renderItem = function( ul, item ) {
    return $( "<li></li>" )
        .data( "item.autocomplete", item )
        .append( "<a>" + item.articleName + " - " + item.articleDescription + "</a>" )
        .appendTo( ul );
};

你可以看到我需要ID才能获得正确的值。 这是不起作用的:

staffid: $itemrow.find('#debiteuren_staffmembers_id').val()

这就是HTML,例如:

<tr class="item-row">
<td>
   <textarea name="debiteuren_staffmembers[]" id="debiteuren_staffmembers"></textarea>
   <input type="hidden" name="debiteuren_staffmembers_id[]" id="debiteuren_staffmembers_id" value="2">
</td>
<td>
   <textarea name="articleName[]" id="articleName"></textarea>
</td>
</tr>

例如,如果我更改代码以获得staffid:

staffid: $('#debiteuren_staffmembers_id').val()

它可以工作,但它只会从表格中的第一个ROW中获取FIRST隐藏输入的值,而我需要使用自动完成功能的当前行的输入。

如果有人能发光,我们将不胜感激。谢谢大家。

1 个答案:

答案 0 :(得分:1)

从问题和对话判断,你正在使用

id="debiteuren_staffmembers" //etc...

表示多个元素。尝试在标记中使用clases作为多个元素,或者因为无效的HTML而使用其他属性,在id属性的DOM值中必须是唯一的,这就是为什么你无法获得值。

<强> UPD

您的$(this)关键字未引用$(".articleName")输入字段。它引用了自动完成对象。你需要寻找一种方法来找到输入字段。

例如,你可以使用:

$(".articleName").each(function(index, value){
  var $that = $(this);
  $(this).autocomplete({
      source: function(request, response) {
      var $itemrow = $that.closest('tr');
      ....
});

检查您正在使用的自动完成插件的文档,以便对输入对象进行重新引用。