1

我有点卡住并在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: $('#debiteuren_staffmembers_id').val()

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

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

4

1 回答 1

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

要么检查您正在使用的自动完成插件的文档,以获取对输入对象的引用。

于 2013-06-11T07:47:14.043 回答