将统一js重新应用于克隆选择

时间:2013-06-12 17:51:45

标签: jquery clone uniform jquery-uniform

我正在克隆包含两个文本输入和一个选择选项的行。我正在使用Uniform插件来设置选择的样式。但是,在克隆行之后,将应用统一样式,但是均匀/选择本身不起作用。焦点仍然在原始选择上,克隆选择的值不会改变。

您可以在这个小提琴(associated with this thread)中看到克隆选择的确切问题:http://jsfiddle.net/broncha/WsFyV/34/。克隆后,价值观永远不会改变。该线程中提到的修复不起作用,可以在那个小提琴中看到。

我正在克隆我的行的脚本是这样的,从previous quesiton调整:

$('.add-row').on('click', function(event) {

    function incrementProp(index, prop) {
        return prop.replace(/(\d+)/, function(fullMatch, n) {
            return Number(n) + 1;
        });
    }

    var cloneVar = $(this).parent().parent('.sortable');
    var cloneRow = $(cloneVar).find('.sort-group .row:last');
    var cloneIns;

    if (cloneVar.hasClass('before')) {
        cloneIns = $(cloneVar).find('.sort-group .row:first');
        insert = 'insertBefore';
    } else {
        cloneIns = $(cloneVar).find('.sort-group .row:last');
        insert = 'insertAfter';
    }

    cloneRow.clone(true)[insert](cloneIns)
    .addClass('add').removeClass('first')
    .find('input[type=text], textarea, select').val('').attr('name', incrementProp).end()
    .find('input, textarea, select, .selector').attr('id', incrementProp).end()
    .find('option:selected').removeAttr('selected').end()
    .find('.remove').removeClass('visible');

    return false;
});

在那里的脚本中,ID和名称都按预期为.selector类增加并选择自身。因此,选择ID /名称将显示为clone_test[0][thomas_the_train]clone_test[1][thomas_the_train],依此类推。

我已经尝试过这些各种方法来重新应用克隆选择,但这些方法都不起作用:

已添加到cloneRow链中:

.find('select').uniform().end()

cloneRow链之后的

$.uniform.update('select');

$('.select-class').on('change', function() {
    $.uniform.update('select');
});

任何人都有任何想法如何统一处理克隆元素?任何帮助都会非常感激!!

1 个答案:

答案 0 :(得分:4)

您只需在开始克隆元素(或元素)之前使用$.uniform.restore('select');,然后在将这些元素添加到页面后再次调用$('select').uniform();,以便应用样式。我已经使用您提供的示例创建了一个jsfiddle:http://jsfiddle.net/aykRa/