0

我正在使用 Chosen JS jQuery 插件,并且每次将克隆的元素(使用 true,ture - 这是因为我需要复制点击事件)附加到 dom 时,我都试图让它重新呈现。

这是我的代码:

    var container = jQuery(self.options.parent_class + ' tbody tr:first-child'),
    container_clone = container.clone(true,true);

    var elem = container_clone.find('select');
    elem.chosen('destroy');
    elem.chosen();

    return container_clone;

这是小提琴:http: //jsfiddle.net/udj7t/1/

4

2 回答 2

3

尝试这个,

$(document).ready(function(){
    $('select').chosen();
    $('a#clone_me').on('click', function(){
        var $clone = jQuery('#toClone select:first').clone();
        $clone.removeAttr('style');
        //$clone.chosen('destroy');
        jQuery('#toClone').append($clone);
        jQuery('#toClone select:last').chosen();
    });
});

演示

于 2013-10-16T13:38:59.567 回答
0

对于那些对可能与 clone(true, true) 一起使用的解决方案感兴趣的人,根据 OP 的实际问题,我发现执行以下操作对我有用。我的克隆行中也有多个选择,所以我需要使用 each() 方法。不过,这很容易适应。

// Look through the cloned row and find each select
$clone.find('select').each(function (){

    // Because chosen is a bitch with deep cloned events 
    // We need to make another internal clone with no events
    $clonedChosen = $(this).clone().off();

    // Now we can delete the original select box
    // AND delete the chosen elements and events
    // THEN add the new raw select box back to the TD
    $parentTd = $(this).closest('td');
    $parentTd.empty().append($($clonedChosen).show());

    // Finally, we can initialize this new chosen select
    $parentTd.find('select').chosen();
}
于 2016-07-14T22:22:01.033 回答