克隆元素的jQuery子元素不响应事件

时间:2010-01-01 22:31:54

标签: events jquery

摘要

我正在使用jQuery来克隆包含组(“groupBox”)的div(“boxCollection”),每个组都包含一组输入。输入在$(document).ready处具有与它们相关联的更改事件,但克隆的div内的输入不响应事件触发器。我无法在IE7,IE8或FF3中使用它。

以下是我的示例代码:

HTML:

<div class="boxCollection"><div class="groupBox" id="group_1"><input type="text"></input></div></div>

jQuery事件:

$(".groupBox[id*='group']").change(function(){
    index = $(this).attr("id").substring(6);
    if($("input[name='collection_"+index+"']").val() == "")
    {
        $("input[name='collection_"+index+"']").val("Untitled Collection "+index);
    }
});

jQuery克隆语句:

$(".boxCollection:last").clone(true).insertAfter($(".boxCollection:last"));

2 个答案:

答案 0 :(得分:4)

使用live()自动将事件处理程序放在动态创建的元素上:

$(".groupBox[id*='group']").live("change", function() {
  ...
});

您似乎在change()上放置了<div>事件处理程序(基于您的示例HTML)。另外,我建议不要使用属性选择器。你已经给了它一个类而不是:

$("div.groupBox ...")...

最后,您尝试为每个文本输入指定一个唯一的名称。你没有说你的服务器端技术是什么,但很多(大多数?)会比这更好地处理这个问题。例如,在PHP中,您可以执行以下操作:

$_POST将包含一个元素“box”,其中包含三个值的数组。

答案 1 :(得分:1)

我不确定这是否会奏效,但我会试一试,说你需要分配直播活动

$(".groupBox[id*='group']").live('change', function() { });

您可能在IE6 / 7中遇到changelive的问题,因此我建议您使用livequery插件来解决该问题。