我有点卡住了,并且在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隐藏输入的值,而我需要使用自动完成功能的当前行的输入。
如果有人能发光,我们将不胜感激。谢谢大家。
答案 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');
....
});
检查您正在使用的自动完成插件的文档,以便对输入对象进行重新引用。