我克隆一个元素并将其添加到DOM。我预计新创建的克隆元素中的this
将引用自身,但它似乎是指原始的克隆元素。如何克隆元素及其关联的事件回调?
为了说明,我创建了以下脚本。通过点击“cloneIt”,添加一个新元素,并在点击新元素时,this
引用原始的克隆。我的愿望是为data('type')
显示“添加”。
如何克隆元素并使回调与新克隆的对象有关?
$('.fileupload').fileupload({
start: function (e, data) {
console.log('start', this, $(this).parent().data('type'));
}
})
.on('fileuploadsubmit', function (e, data) {
console.log('fileuploadsubmit', this, $(this).parent().data('type'));
});
$('#cloneIt').click(function() {
$('#clone').clone(true).removeAttr('id').data('type', 'added').appendTo('#container');
});
#clone {
display:none;
}
<button id="cloneIt">cloneIt</button>
<ul id="container">
<li id="clone" data-type="clone">
<input class="fileupload" name="file" type="file" />
</li>
<li data-type="existing">
<input class="fileupload" name="file" type="file" />
</li>
</ul>
不确定你到底在想什么,但是如果你定义了'$('。fileupload')'和*然后*创建一个克隆,它将不被包含。当使用'.attr('data-type','added')'时,更改数据属性似乎只能工作。 – Shikkediel
@Shikkediel'.attr()'提供了相同的结果。请参阅http://jsfiddle.net/fq4rqc1u/5/。我将'$('。fileupload')'应用于'#clone'以及另一个'input',其''数据类型''存在',并且这些似乎都起作用。但是,当我克隆时,它与现有数据值保持一致。也许某种回调函数而不是直接访问'this'? – user1032531
'console.log($(this).parent()是什么?index());'log? –