【问题标题】:jQuery does not see my dynamically loaded checkboxesjQuery 看不到我动态加载的复选框
【发布时间】:2011-05-09 11:18:34
【问题描述】:

我编写了一个脚本,它将一系列产品加载到一个 div 标签中。

我现在希望能够使用一系列复选框过滤这些产品。

jquery 向返回 XML 数据集的 ASP 页面创建 $post。数据集的第一个元素包含格式为 ara|dai|sid|alp 等的制造商列表。第二个元素包含上述代码的制造商名称。

然后我使用此脚本将复选框列表构建到 div 标记中。

var mc = new Array();
mc = $("manCodes",xml).text().split(",");
var manTitles = new Array();
manTitles = $("manTitles",xml).text().split(",");

for ( var i=0, len=mc.length; i<len; ++i ){
    m += '<span><input type="checkbox" value="' + mc[i] + '" name="man[]" id="man_'+i+'" />' + manTitles[i] +'</span>'//mc[i];
    }
manufacturers = '<div id="filter" class="man">FILTER<br />' + m + '</div>';
$(".formSelect").append(manufacturers);

这是一种享受,然后在“文档就绪”部分中,我有一个代码段,用于查找对复选框的任何点击:

$(document).ready( function() { 
     $("input:checkbox").click(function() {
    loadXML($("#sortOrder option:selected").val(),$("#limitBy option:selected").val(),$("#productGroup").val());
     });
});

这是我的代码失败的地方,因为对任何复选框的任何点击都不起作用。它几乎就像 JQuery 看不到它创建的这些复选框。

有人可以帮忙解决这个问题吗?

干杯 格雷厄姆

【问题讨论】:

标签: javascript ajax jquery post


【解决方案1】:

您需要事件委托,否则事件处理程序不会为动态插入/删除的元素触发。 .live.delegate 是两个选项。

$("input:checkbox").live("click", function() {
    // implementation
});

或更好:

$("form").delegate("input:checkbox", "click", function() {
    // implementation
});

【讨论】:

    【解决方案2】:

    使用jQuery.live() 从动态添加的元素中捕获事件。

    为所有事件附加一个处理程序 与当前匹配的元素 选择器,现在和将来。

     $("input:checkbox").live("click", function() {
         loadXML($("#sortOrder option:selected").val(),$("#limitBy option:selected").val(),$("#productGroup").val());
     });
    

    【讨论】:

      【解决方案3】:

      试试:

      $(document).ready( function() { 
           $("input:checkbox").live("click",function() {
          loadXML($("#sortOrder option:selected").val(),$("#limitBy   option:selected").val(),$("#productGroup").val());
           });
      });
      

      【讨论】:

      • 速度非常快,非常感谢。这是一种享受,你介意解释一下这是什么吗?
      • 当您调用 click 时,它会将事件绑定到当前 DOM 中存在的任何复选框。此事件绑定发生在您创建新复选框之前,因此这些新复选框未附加到事件侦听器。 live 方法适用于稍后添加的那些元素(在本例中为复选框),这就是为什么它被命名为“live”
      猜你喜欢
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多