当前位置: 首页 > 面试题库 >

绑定由AJAX插入的动态创建的元素上的事件(复选框)

章飞虎
2023-03-14
问题内容

我是jQuery的新手。我写了一段代码,将一张桌子上的产品与另一张桌子上的产品动态地相加,如下所示FIDDLE:正如您在小提琴中看到的那样,这段代码对我来说很好。

现在,我已经使用ajax通过动态生成此产品列表(表2)来操纵了此代码,现在该代码对我不起作用。

正如我已经想过这个缺陷,事情,我想我所有的CSS和JS脚本得到加载与网页的加载速度 抵达动态加载但是该复选框(表2),这就是为什么JS不是娱乐本
....

因此,如何在动态加载的输入字段上触发事件函数…只希望此脚本得到改进: JQUERY 1.6.4

这是我的看法:

<div class="_25">
    <?php echo form_dropdown('class', $dropdown_class,'','id="clas"'); ?>
</div>

<div class="_25">           
    <?php echo form_dropdown('section',$dropdown_section); ?>
</div>

<table class="table" border="1">
    <thead><tr>
        <th>Select</th>
        <th>Cause</th>
        <th>Monthly Charge</th>
    </tr></thead>

    <tbody id="selectedServices"></tbody>

    <tr>
        <td>Total-</td>
        <td>Fee</td>
        <td id="total">1500</td>
    </tr>
</table>

<!-- product list (will generate dynmiclly)like tble 2 in fiddle -->
<table id="abcd" class="table" border="1">
    <thead><tr>
        <th>Select</th>
        <th>Cause</th>
        <th>Monthly Charge</th>
    </tr></thead>
    <tbody id="name_sec">
        <!-- here your dat will appear as per selection of class ajax check the below function and related controller mthod 
        the value will come with chk box for selection ad prepering the data-->
    </tbody>
</table>

这是我的脚本:

<script language="javascript">
jQuery(function ($) {

    $("#clas").change(function() {
        var send_data=$("#clas").val();

        $.ajax({
            type:"post",
            url:"show_additional_fee_chkbox_select",
            data:"send_data_post_for_chkbox="+send_data,
            success:function(data){
                $("#name_sec").html(data);
            }
       });
    });

    $(":checkbox").change(function () {
        // Toggle class of selected row
        $(this).parent().toggleClass("rowSelected");

        // Get all items name, sum total amount
        var sum = 1500;
        var arr = $("#abcd :checkbox:checked").map(function () {
            sum += Number($(this).parents('tr').find('td:last').text());
            return $(this).parents('tr').clone();
        }).get();

        // Display selected items and their sum
        $("#selectedServices").html(arr);
        $("#total").text(sum);

        $('#selectedServices :checkbox').change(function() {
            $('#selectedServices :checkbox:unchecked').parents('tr').remove();
        });
    });

});
</script>

而我的控制器:

public function show_additional_fee_chkbox_select()
{
    $class=$_POST['send_data_post_for_chkbox'];

    //here goes ur process to display list of extra/additional fee

    $extra_fee_list='';    
    $sql2="SELECT * FROM fee_additional_fee where class=?";
    $query2 = $this->db->query($sql2,$class);

    foreach ($query2->result_array() as $row2) {
        $extra_fee_list=$extra_fee_list.' 
        <tr>        
            <td>  
                <input type="checkbox" id="selectedServices" class="checkBoxClass" name="additional_fee_code[]"  value="'.$row2['id'].'"> Select</input>
            </td>

            <td>'.$row2['cause_addition_fee'].'</td>
            <td>'.$row2['fee'].'</td>
        </tr>  ';

        // here again plz take input in  arry ----additional_fee_code will work for next method (cal_total_extra_fee())
    }

    echo $extra_fee_list;
}

问题答案:

如我所知,AJAX结果data是一个表行元素,<tr>其中包含数据单元格<td>,输入<input>等。

如果您想访问里面的元素data,这应该可以解决问题:

$(':checkbox', $(data));

因此,您可以在data准备好之后在内部元素上设置事件。

// Since jQuery 1.7
$(':checkbox', $(data)).on('click', function() {});

// Or
$(':checkbox', $(data)).click(function() {});

您也可以声明全局函数,只需将其名称插入.click().on()方法作为处理程序即可。

因此,只需编辑$.ajax类似于以下内容的部分:

$.ajax({
    type    : "post",
    url     : "show_additional_fee_chkbox_select",
    data    : "send_data_post_for_chkbox="+send_data,
    success : function(data) {
        var html = $(data);
        $('input[type="checkbox"]', html).click(onClickFunction);
        $("#name_sec").html(html);
    }
});

这是一个 JSBin演示

第二解决方案

还有另一种在插入的元素上绑定事件的方法。

使用jQuery .find()方法可能是一个选择:

// Since jQuery 1.6
$('#name_sec').find(':checkbox').click(function() {
    // Do whatever you want
});

这应该后右侧放置$("#name_sec").html(data);$.ajax部分。

第三种解决方案:

通过使用jQuery .on()方法非常简单:

// Since jQuery 1.7
$('#name_sec').on('click', ':checkbox', function() {
    // Do whatever you want
});


 类似资料:
  • 问题内容: 这个问题的答案是 社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 我有一些代码,在其中循环浏览页面上的所有选择框,并将事件绑定到它们上,以使它们的宽度变窄。 这在页面准备就绪时发生,并且工作正常。 我的问题是,在初始循环之后,我通过Ajax或DOM添加的所有选择框都没有事件绑定。 我已经找到了这个插件([jQuery Live Query Plugin](),但是在

  • 本文向大家介绍如何使用jQuery在动态创建的元素上绑定事件?,包括了如何使用jQuery在动态创建的元素上绑定事件?的使用技巧和注意事项,需要的朋友参考一下 要在动态创建的元素上绑定事件,您需要动态加载。您可以尝试运行以下代码,以了解如何在动态创建的元素上绑定事件。在这里,我们将在单击按钮时生成一个新的列表项。 示例

  • 问题内容: 我正在上传多个图像,并将它们放置在ondiv必须切换某些类的某些div中。我是否必须将添加onclick事件的部分放在ajax成功函数中?非常感谢! 我正在使用“ on”上的jquery,但似乎不起作用。可能我缺少了一些东西 这是我的代码: Javascript: HTML: 问题答案: 对于动态创建的元素,您必须使用.live()但是,在1.7中不推荐使用,而在中将其完全删除。该签名

  • 问题内容: 我有一个带有多个选项卡的选项卡页,一旦单击该选项卡,就会调用服务以返回一些数据。其中一些数据返回html表单,并且非常随机。我想收集输入的值,并通过服务将数据发送回服务器。我的问题是无法从正在动态创建的html中的输入元素中获取数据。 我创建了一个Plunker来显示问题所在。请注意,html值可以随时更改,因此对html进行硬编码将无法使用。在这里,代码来自plunker,但是请查看

  • 问题内容: 我正在竭尽全力试图找出为什么鼠标悬停事件无法与具有从ajax动态创建的元素的.on处理程序一起使用的原因。似乎唯一起作用的是带有.live的代码,但我知道它已被弃用。 但是,当我尝试使用.on时,它将不起作用-无论我尝试了什么变体(document.ready,.mouseover等) 事件处理程序位于代码的底部,因此它们最后执行。有人知道我在做什么错吗? 问题答案: 使用与新生成的元

  • 问题内容: 是否可以向所有动态生成的元素添加事件侦听器(Javascript)?我不是页面的所有者,因此无法以静态方式添加侦听器。 对于页面加载时创建的所有元素,我使用: 当页面上出现新元素时,我需要一种方法来调用此代码,但是我无法使用jQuery(在项目中无法使用elegate,on等)。我怎样才能做到这一点? 问题答案: 听起来您需要执行委派策略而又不退回图书馆。我在此处的小提琴中发布了一些示