#javascript #ajax
#javascript #ajax
Вопрос:
У меня есть таблица с полем, которое добавляется, когда я нажимаю добавить строку. Я хочу иметь возможность получать elementsbyname и вставлять значение цены из базы данных в каждое поле при добавлении строки и выборе элемента.
Добавленные строки
let int=0;
function addRow() {
var tr = '<tr>' '<td class="forhead" style="white-space:nowrap;" width="20"><input type="checkbox" name="chk[]"/></td>'
'<td class="forhead" style="white-space:nowrap;" width="80"><input type="number" name="items[' (int) '][inv_quantity]" id="qty[]" onkeyup="getValues()" style="width: 70px" class="form-control" onBlur=""></td>'
'<td><select name="items[' (int) '][inv_item]" class="form-control item" onChange="pDescription()" >@foreach($product_dup as $dup_product)<option>{{$dup_product->pdt_name}}</option>@endforeach</select></td>'
'<td><input type="text" name="items[' (int) '][inv_desc]" class="form-control description" id="product_desc"></td>'
'<td class="forhead" style="white-space:nowrap;" width="150"><input type="text" name="items[' (int) '][inv_price]" id="rate[]" onKeyUp="getValues()" class="form-control" value=""></td>'
'<td class="forhead" style="white-space:nowrap;" width="80"><input type="text" name="items[' (int) '][inv_total]" id="amt[]" onKeyUp="getValues()" class="form-control" value=""></td>'
'<td width="80" align="right" class="forhead" style="white-space:nowrap;"><select name="items[' (int) '][inv_tax]" style="width:80px" onChange="getValues()" class="form-control"><option value="0">Select</option><option value="5">5</option><option value="12.5">12.5</option></select></td>'
'<td class="forhead" style="white-space:nowrap;" width="80"><input type="text" name="vat_amt[]" id="vat_amt[]" class="form-control"></td>'
'</tr>';
$('tbody').append(tr);
int ;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span><button type="button" class="btn btn-primary btn-sm" onClick="addRow('dataTable')" ><i class="fa fa-plus" aria-hidden="true"></i> Add Row</button></span>
<table><tbody></tbody></table>
Запрос Ajax
var int = 0 ;
function pDescription() {
var getDescription = document.getElementById('product_value');
var id = getDescription.value
$.ajax({
url: '/get-description/' id,
dataType: 'JSON',
type: 'GET',
success: function (data) {
document.getElementsByName("items[' (int) '][inv_price]")[0].value = data
},
error: function (err) {
console.log(err);
}
});
getValues();
}
document.getElementsByName("items[' (int) '][inv_price]")[0].value = data
у меня не работает. Пожалуйста, как мне правильно это сделать?
Комментарии:
1.
name
является настраиваемым атрибутомtd
,gEBN
собирает только элементы, имеющиеname
в качестве собственного свойства (элементы управления формой и элементы окна). Используйтеdocument.querySelectorAll
и селектор атрибутов , или, скорее, класс вместоname
.2. Пожалуйста, есть ли способ сделать это? я попрошайничаю в JS
3. пожалуйста, я получаю эту ошибку
Uncaught Error: Syntax error, unrecognized expression: input[name=`[${int}][${inv_price}]]
Ответ №1:
- Ваши идентификаторы должны быть уникальными или не использовать их. Используйте класс
- В любом случае используйте jQuery, который у вас есть:
$("select").on("change", function() {
const $parentRow = $(this).closest("tr")
const id = $parentRow.find("whateverhastheID").data("id"); // ... data-id="theIdYouNeed"
$.ajax({
url: '/get-description/' id,
dataType: 'JSON',
type: 'GET',
success: function(data) {
$parentRow.find(".someClass").value=data;
},
error: function(err) {
console.log(err);
}
});
});