jquery克隆html问题,更新DOM?

我需要javascript / jquery专家的帮助来解决下一个问题:

—- 1. 此javascript警告select html标记中所选选项的ID:

$(function(){ $("#id_productos_list").change( function(){ var op = $(this).selectedValues() alert(op); } ); }); 

—- 2。 这个javascript克隆html代码:

 function cloneMore(selector, type) { var newElement = $(selector).clone(); var total = $('#id_' + type + '-TOTAL_FORMS').val(); newElement.find(':input').each(function() { var name = $(this).attr('name').replace('-' + (total-1) + '-','-' + total + '-'); var id = 'id_' + name; $(this).attr({'name': name, 'id': id}).val('').removeAttr('checked'); }); newElement.find('label').each(function() { var newFor = $(this).attr('for').replace('-' + (total-1) + '-','-' + total + '-'); $(this).attr('for', newFor); }); total++; $('#id_' + type + '-TOTAL_FORMS').val(total); $(selector).after(newElement); } 

—-这是JS克隆的HTML代码的一部分,它没有任何问题

   One Two  

但只是javascript#1使用初始的html代码(原始克隆)。 克隆的其他人不会提醒选定的选项。 我已经使用diferents id的attrs测试了每个克隆的选择标签,没有结果。

什么我失踪了? firebug显示克隆的html DOM很好:S我必须在克隆后更新DOM以生成$(“#id productos list”)。change(…)有效吗?

jQuery $("#...")语法将通过精确id返回第一个匹配的元素。 如果您正在克隆元素但没有按ID区分它们,则此代码将无法按预期工作。

您可以比较以下两个表达式之间的差异:

 alert($("#id_productos_list").size()); 

…和

 alert($("[id='#id_productos_list']").size()); 

第一个表达式将返回0或1,具体取决于页面中id为“id_productos_list”的元素的存在。 声明顺序中的第一个元素获胜。

第二个表达式将返回零或一个或多个,具体取决于页面中id为“id_productos_list”的所有元素的集合。

另外需要注意的是,事件处理程序似乎不会作为clone()操作的一部分进行clone() 。 您可能需要将这些处理程序重新分配给新元素。

 var newElement = $(selector).clone(true); 

你试过克隆所有处理程序的.clone(true)吗? 它在Clone文档的底部描述。