jQuery更改为克隆的自动完成小部件,仅更改原始

时间:2011-05-03 23:36:49

标签: jquery user-interface autocomplete clone

对不起标题,我真的不知道如何简单地提出这个问题。我有一个函数,它用它的所有子元素克隆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次并重复每次我改变一些东西。

1 个答案:

答案 0 :(得分:1)

您是否尝试过将jQuery Live关键字与自动填充功能结合使用?

修改

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

前段时间我也做过类似的事情;

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

创建控件后,它运行正常。