2013-02-12 74 views
1

我有一个使用Jquery clone()克隆多个元素的问题。多个元素上的jquery clone()

我有HTML:

<div id="is_watermark"> 
    <input class="is_watermark" type="checkbox" name="is_watermark" value="1" checked /> 
    <span>Add watermark</span></div> 
<div id="minify_image"> 
    <p>By default image is 400px. You can change size:</p> 
    <input class="minify-radio" type="radio" name="minify" value="200" /><span>200px</span> 
    <input class="minify-radio" type="radio" name="minify" value="400" checked="checked"/><span>400px</span> 
    <input class="minify-radio" type="radio" name="minify" value="600" /><span>600px</span> 
    <input class="minify-radio" type="radio" name="minify" value="800"/><span>800px</span> 
</div> 

然后我用ajaxFileUpload基本上创造了新的形式,并通过Ajax发送图像:

我在我的Javascript如下:

var oldInputElements = $('.minify-radio, .is_watermark'); 
var newInputElements = $(oldInputElements).clone(true); 
console.log(oldInputElements); 
console.log(newInputElements); 

在Firebug我发现oldInputElements很好,代表了我在HTML中的内容,但是新创建的newInputElements包含所有元素,但包含onl y来自无线电元件的一个普遍价值。例如,如果目前收音机选择的值为600,那么在新创建的变量newInputElements中,所有五个输入元素(包括复选框!)将具有值600.

这是一个错误,还是我简单地丢失了某些东西?

+0

您能提供一个显示问题的小提琴吗?它听起来像一个错误。 – 2013-02-12 12:18:17

+1

当克隆元素只有默认值与它一起克隆时,下拉列表或单选按钮上的任何选择都不会与它一起克隆。试着看看'clone(true,true)'是否起作用,但是如果不是,你将不得不将任何选定的值沿着边存储在一个单独的对象中,并在插入后重新选择/填充克隆的元素。 – Nope 2013-02-12 12:20:03

+0

如果您执行'oldInputElements.clone(true)',它是否按预期工作? – 2013-02-12 12:23:26

回答

0
$("input:radio").change(function() { 
    $("input:radio").removeAttr("checked"); 
    $(this).prop("checked", true); 
}); 

您可以使用此代码。删除选中的属性/属性,然后将该属性添加到当前选定的项目/节点。

Fiddle

+0

希望这可以帮助你。 – 2013-02-12 12:30:22

+0

感谢您的回答,我使用了您的示例代码 - 并且它工作正常。下面是来自Firebug的这个屏幕:http://i.imgur.com/fum3lyR.jpg我也不能在小提琴中表现出来(正如我在上面的评论中提到的那样)。但是,当我使用我的初始(似乎这个环境是有道理的),我得到这个:http://i.imgur.com/AIDLfwF.jpg而非常奇怪的是,它显示对象的线上适当的值,但是当我展开它 - 所有的值都是600,并且600被发送到服务器。 – Volder 2013-02-12 12:46:12

+0

哇哇的男人,是巨大的差异。你用你的实际代码检查了Chrome的控制台,而不是我给你的? – 2013-02-12 12:48:34