Php不工作添加更多行(中继器)

我使用表单中继器创建发票。发票有多个产品来自数据库和价格。 当我选择产品时,其自动价格出现在费用框中,并且还有其他输入框,如折扣和百分比,默认值为0 0。第一行工作得很好。但是当我点击添加更多按钮来生成下一行添加另一个产品。Php不工作添加更多行(中继器)

在下一行中,我可以从下拉列表中选择产品。但其费用没有出现,其他输入框值如折扣和百分比也消失(他们没有显示任何默认值。)

这是我的HTML代码。

<div class="row"> 

<div class="col-xs-3">

<label for="single" class="control-label">Select Invoice Type</label>

</div>

<div class="col-xs-2">Fee</div>

<div class="col-xs-1">Quantity</div>

<div class="col-xs-1">Discount</div>

<div class="col-xs-2">Total</div>

<div class="col-xs-1">Doctor %</div>

</div>

<div class="mt-repeater">

<div data-repeater-list="group-b">

<div data-repeater-item class="row">

<div class="col-xs-3">

<div class="form-group">

<select id="invoice" class="form-control" name="invoice">

<option></option>

<?php

$select = mysqli_query(connection(), "select * from treatement");

while($r = mysqli_fetch_array($select)) {

echo "<option value='$r[0]'>$r[name]</option>";

}

?>

</select>

</div>

</div>

<div class="col-xs-2">

<div class="form-group">

<input type="text" value="" class="form-control" placeholder="Fee" name="fees" id="fees">

</div>

</div>

<div class="col-xs-1">

<div class="form-group">

<input type="text" class="form-control" value="1" name="quantity" >

</div>

</div>

<div class="col-xs-1">

<div class="form-group">

<input type="text" value="0" class="form-control" placeholder="Discount" name="discount">

</div>

</div>

<div class="col-xs-2">

<div class="form-group">

<input type="text" value="0" class="form-control" placeholder="Total" readonly name="total">

</div>

</div>

<div class="col-xs-2">

<div class="form-group">

<input type="text" value="0" class="form-control" placeholder="%" name="percentage">

</div>

</div>

<div class="col-md-1">

<a href="javascript:;" data-repeater-delete class="btn btn-danger">

<i class="fa fa-close"></i>

</a>

</div>

</div>

</div>

<a href="javascript:;" data-repeater-create class="btn btn-info mt-repeater-add">

<i class="fa fa-plus"></i> Add More

</a>

<br>

<br>

</div>

而且我使用js函数来比较每个产品的费用。这有助于我在一个盒子里显示费用。

$(document).ready(function() { 

$("#invoice").change(function() {

var value = $(this).val();

$.get("get_fees.php", {

id: value

}, function(data) {

$("#fees").val(data);

})

})

})

回答:

请..不要使用这样的ID。 ID必须是唯一的,你应该使用类而不是ID(见barmar评论)

<p id="test"></p> 

<p id="test"></p>

<p id="test"></p>

应该

<p id="test1" class="test"></p> 

<p id="test2" class="test"></p>

<p id="test3" class="test"></p>

你的是,我不使用同一ID,因为ID必须是唯一的。

  • 1个ID必须由1个元素使用。
  • 1类可以由很多元素

使用,但是,你仍然可以破解这个。 $('select[id="invoice"]')

,似乎你创建新的DOM,你可以改变这一行

$("#invoice").change(function() {

成为

$("body").on('change', 'select[id="invoice"]', function() {

UPDATE: 为什么你总是改变你的第一选择/对第一个id =费用。因为你使用$('#fees').val()

必须指定,具有:获取父(我closest()使它),然后找到您要更改

,因为你不特定的ID =“费”有识别你的父母中继anyspecific类,我选择添加rowsdata类

变化<div data-repeater-item class="row"><div data-repeater-item class="row rowsdata">

和你的脚本将看起来像这样

$("body").on('change', 'select[id="invoice"]', function() { 

var select = $(this);

$.get("get_fees.php", {

id: select.val()

}, function(data) {

select.closest('.rowsdata').find('input[id="fees"]').val(data); //if you still give id="fees" and dont have any class use this

//select.closest('.rowsdata').find('.fees').val(data); if you already give class="fees", use this

});

});

以上是 Php不工作添加更多行(中继器) 的全部内容, 来源链接: utcz.com/qa/266959.html

回到顶部