用户界面- jQuery更改为克隆的自动完成小部件,只更改原始



对不起,我真的不知道如何简单地提出这个问题。我有一个函数,克隆一个TR及其所有子元素并重命名它们(id和name),它将克隆添加到原始元素下面。TR中的一个元素(目前只有一个,很快会变成4个)是一个jQuery UI自动完成小部件。

所以我的第一个问题是,当新的TR被添加时,继承的自动完成小部件不再是一个自动完成小部件—它只是一个普通的旧文本字段。这是有意义的,因为我必须对新创建的元素应用一个新的$(foo).autocomplete(bar)。

所以我的下一个问题来了,当我试图重新应用$(foo).autocomplete(bar)克隆元素,它似乎改变了原来的元素,而不是新的克隆!我调用$(foo).autocomplete(bar)的同时,我对相同的元素做了其他的改变,这些改变工作得很好(id和名称)。克隆TR后,原物的行为完全符合克隆体的行为,而克隆体基本上什么也不做!

很抱歉解释得太长了,下面是代码:

    function cloneBelow(TR) {
        var newRow = $(TR).clone();
    var lastID = $(TR).attr('id');
    var currID = Number(lastID.substring(3));
    var newID = currID;
    var i = 0;
    while(i < 1){
    newID = newID + 1;
    if($(('#tr_' + newID).replace(/./g, "\.")).length < 1){
        i = 1;
    }
    }
    $(newRow).attr('id','tr_'+newID);
    $(TR).after(newRow);
    var i = 0;
    $('#tr_'+newID).find("[type=text],td,.cellContent").each(function(){
    var child = $(this);
    var newVal = child.attr("id");
    newVal = newVal.substring(0,newVal.indexOf("_")+1) +newID+newVal.substring(newVal.lastIndexOf("_"));
    child.attr("id", newVal);
    //apply changes to form autocomplete fields:
    if($(child).attr('name')){ //this will filter out any non-text fields
    child.attr("name", newVal);
    //Begin code to make element a autocomplete widget
    var tmpArray = ["test1","test2","test10"];
    $(child).autocomplete({
        source: tmpArray,
        select: function(event, ui) {
        var CTId = $(child).attr("id").substr(3);
        var selectedObj = ui.item;
        $('#CT_'+CTId).html(selectedObj.value);},
        minLength: 0
    }).addClass("ui-widget ui-widget-content ui-corner-left");
    alert($(child).attr("id")+" - "+tmpArray);
    }
});
    $(".target").contextmenu(option);
    }

我对jQuery不是很有经验(你可能会说),我已经解决了这个项目的无数问题,我真的很接近。

编辑:

我尝试使用。autocomplete("destroy")方法将克隆元素还原为纯文本字段,这样我就可以重新应用。autocomplete(),它实际上从两个元素中删除了它-不是我想要的。然而,我了解到jQuery UI不支持克隆,所以显然它是克隆元素,但克隆和原始共享相同的小部件或其他。

我仍然在寻找这个问题的递归解决方案,因为我有4个类似的函数和7个不同的元素,每一行需要自动完成-显然我不想复制和粘贴代码28次,并重复每次我改变的东西。

您是否尝试过使用jQuery Live关键字与自动完成?

编辑

我在使用自动完成插件时遇到了类似的问题。

我以前也做过这样的事;

$("#PositionsAvailableSkills").autoSuggest(...

在我创建控件之后,它工作得很好

最新更新