Javascript 更改函数不适用于动态创建的对象
我加载了一个HTML,如下所示:-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($
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将详细了解动态生成元素的事件委派。