我克隆一個元素並將其添加到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? –