不同的结果来自同一领域

时间:2016-12-22 10:04:29

标签: javascript php jquery codeigniter-2 onchange

这里使用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

1 个答案:

答案 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 - 它似乎是来自数据库的状态值,用户不应该更改。因此它应该是标签或跨度,真的。文本框用于输入,而不是输出。此外,您的用户可以键入并更改值,这可能会使他们感到困惑。但我会让你对此进行排序。