这里使用Dynamic-Form-Element-Creation-And-Deletion-Plugin-Addel
来插入更多的值及其工作但这里遇到的问题是当我从addel使用的选择框中选择一个值时,相应的数据出现在相应的框中,如果我选择通过单击添加按钮的另一个选择框,相应的值出现在第一个字段中,而不是在相应的字段中。
这是我的观点
<div class="form-group ">
<label class="col-lg-3 control-label">Select Tools<span
class="required">*</span></label>
<div class="col-lg-6">
<div class="addel">
<div class="form-group target">
<div class="input-group">
<div class="col-lg-6"> <select class="form-control tools" style="width: 100%" name="tool_id[]" id="tools" onchange="tool(this)" required>
<option value="">Select</option>
</select></div>
<div class="col-lg-3">
<input type="text" class="form-control" required name="quantity[]" id="quantity" placeholder="Quantity">
</div>
<div class="col-lg-3" id="avail">
<input type="text" class="form-control" name="available" id="available" placeholder="Available" value="0 available">
</div>
<span class="input-group-btn">
<button type="button" class="btn btn-danger addel-delete"><i class="fa fa-remove"></i>
</button>
</span>
</div>
</div>
<button type="button" class="btn btn-success addel-add"><i class="fa fa-plus"></i></button>
</div>
</div>
</div>
这是我的脚本
<script>
function tool(sel)
{
var tools=sel.value;
alert(tools);
var url='<?php echo base_url(); ?>admin/tool/ajax_available';
$.post(url, {tools:tools}, function(data)
{
alert("Value: " + $("#avail").html(data));
});
}
</script>
这是我的控制器
public function ajax_available()
{
$data['available']=$this->Tool_model->view_available_by_type($_POST['tools']);
//var_dump($data['available']);
$this->load->view('admin/tool/ajax_available',$data);
}
这是我的ajax_available视图
<input type="text" class="form-control" name="available" id="available" placeholder="" value="<?php echo $available->available;?> available">
我的照片看起来像这样 Valid XHTML http://spdc.in/demo/spectra/assets/images/s-tool.PNG 的
答案 0 :(得分:2)
您没有为您的元素提供唯一标识符。每次添加带有下拉列表和文本框的新行时,它都会为这些新元素再次生成相同的ID。这是无效的HTML,所有元素都必须具有唯一的ID。
所以当你这样做时
$("#avail").html(data)
它找到具有该ID的元素的第一个实例 - 因为应该只有一个。就javascript而言,其他人不存在,因为它们无效。
因为您将有多个&#34;可用&#34;在页面中的文本框中,您无法依靠ID来填充正确的ID。给你的&#34;有用&#34; div一个类而不是id,然后通过使用它在标记中的位置告诉脚本找到相关的一个:
<div class="col-lg-3 avail">
<input type="text" class="form-control available" name="available" placeholder="Available" value="0 available">
</div>
然后在代码中,而不是$("#avail").html(data)
,执行:
$(this).parent().parent().find(".avail").html(data);
这会使DOM增加两个div,以找到select(函数上下文中的this
)的共同祖先,以及要更改的div,然后在其中搜索带有avail
类的元素,并用数据填充它。
您还应该删除&#34; id&#34;来自任何其他可以复制的元素的属性,例如&#34; quantity&#34;,例如。
P.S。我不确定为什么你使用文本框来实现这个&#34;可用&#34; property - 它似乎是来自数据库的状态值,用户不应该更改。因此它应该是标签或跨度,真的。文本框用于输入,而不是输出。此外,您的用户可以键入并更改值,这可能会使他们感到困惑。但我会让你对此进行排序。