Javascript 更改函数不适用于动态创建的对象

Javascript 更改函数不适用于动态创建的对象,javascript,jquery,Javascript,Jquery,我加载了一个HTML,如下所示:- if(isset($company_admin)) { $tot_admin = count($company_admin); for($i = 0; $i < $tot_admin; $i++) {?> <div class="form-group col-sm-12"> <label class="col-sm-2">Admin Image <?php if($

我加载了一个HTML,如下所示:-

if(isset($company_admin))
{
    $tot_admin = count($company_admin);
    for($i = 0; $i < $tot_admin; $i++)
    {?>
       <div class="form-group col-sm-12">
        <label class="col-sm-2">Admin Image <?php if($i > 0) echo ($i+1);?></label>
        <div class="col-sm-9">
            <input type="hidden" name="hid_admin_img[]" id="hid_admin_img<?php if($i > 0) echo '_'.($i+1);?>" value="<?php if(isset($company_admin[$i]['admin_img'])) { echo $company_admin[$i]['admin_img'];} ?>">
             <input type="file" name="admin_img[]" id="admin_img<?php if($i > 0) echo '_'.($i+1);?>" class="form-control"></br>
        <div id="imagePreview3<?php if($i > 0) echo '_'.($i+1);?>"></div>
        <div id="existImage3<?php if($i > 0) echo '_'.($i+1);?>">
        <?php if(isset($company_admin[$i]['admin_img'])) {?>
            <?php if($company_admin[$i]['admin_img'] != ''){?><img src="<?php echo base_url();?>uploads/admin_org/<?php echo $company_admin[$i]['admin_img'];?>" height="100" width="100"><?php } else {?><img src="<?php echo base_url();?>uploads/new-user-image-default.png" height="100" width="100"><?php } }?>
        </div>
        </div>
    </div>
   <?php
  }
}?>
现在,问题就这样出现了。 我添加了一个新功能。单击特定按钮时,将动态添加新的
admin\u img\u
imagePreview3\u
imagePreview3\u

这是通过以下代码完成的:

function append_admin()
{
    var tot_admin = $('#tot_admin').val();
    if(tot_admin < 4)
    {
        tot_admin = parseInt (parseInt(tot_admin) + 1);
        $('#tot_admin').val(tot_admin);


        var admin_image_obj =    '<div class="form-group col-sm-12">';
            admin_image_obj +=  '<label class="col-sm-2">Admin_'+tot_admin+' Image</label>';
            admin_image_obj +=  '<div class="col-sm-9">';
            admin_image_obj +=  '<input type="hidden" name="hid_admin_img[]" id="hid_admin_img_'+tot_admin+'" value="">';
            admin_image_obj +=  '<input type="file" name="admin_img[]" id="admin_img_'+tot_admin+'" class="form-control"></br>';
            admin_image_obj +=  '<div id="imagePreview3_'+tot_admin+'"></div>';
            admin_image_obj +=  '</div></div>'; 

        $('#more_admin_container').append(admin_image_obj);
    }   
}
函数append_admin()
{
var tot_admin=$('tot_admin').val();
如果(tot_管理<4)
{
tot_admin=parseInt(parseInt(tot_admin)+1);
$('tot#u admin').val(tot#u admin);
var admin_image_obj='';
admin_image_obj+='admin_'+tot_admin+'image';
管理图像对象+='';
管理图像对象+='';
管理员图像对象+='
'; 管理图像对象+=''; 管理图像对象+=''; $('more_admin_container')。追加(admin_image_obj); } }
但是,使用动态创建的admin_img_uuu和imagePreview_uu,选定图像的预览不起作用


我做错了什么?

如果在事件分配之后将元素追加到DOM中,则可以使用事件委派来避免问题:

  $(document).on("change", "#admin_img_"+i, function() {
  });

您可以使用附加元素期间不会更改的父元素更改
$(文档)
,也可以使用
$(文档)
在事件委派时迭代所有DOM元素。

如果在事件分配后将元素附加到DOM中,您可以使用事件委派来避免此问题:

  $(document).on("change", "#admin_img_"+i, function() {
  });

您可以使用附加元素期间不会更改的父元素更改
$(文档)
,也可以使用
$(文档)
在事件委派时迭代所有DOM元素。

在追加对象后在append admin函数中添加
change
函数。在追加对象后在append admin函数中添加
change
函数。如果我错了,请更正,但它不应该是
$(文档).on(“更改”、“管理”img+i,function(){})?据了解还是有点困惑。如何迭代$(文档)。。。。。。。在for循环中?再详细一点的例子就可以了。@anu是的,今天我脑子里出了点问题。谢谢,我将编辑:)@Saswat只需更改该行即可,因为在分配事件时元素是否存在并不重要,因为它将被分配到
$(document)
对象,然后它将在您需要的元素中自行委托,无需您的任何干预。@Saswat仔细了解动态生成元素的事件委派。如果我错了,请纠正我,但它不应该是
$(document)。on(“change”、“#admin_img”+I,function(){})?据了解还是有点困惑。如何迭代$(文档)。。。。。。。在for循环中?再详细一点的例子就可以了。@anu是的,今天我脑子里出了点问题。谢谢,我将编辑:)@Saswat只需更改该行即可,因为在分配事件时元素是否存在并不重要,因为它将被分配到
$(document)
对象,然后它将在您需要的元素中自行委托,无需您的任何干预。@Saswat将详细了解动态生成元素的事件委派。