2011-05-03 58 views
0

對不起,我真的不知道如何簡單地提出這個問題。我有一個函數可以克隆一個TR及其所有子元素,並將它們全部重命名(id和name),它將克隆添加到原始文件的下面。 TR中的一個元素(目前只有一個,即將成爲4)是一個jQuery UI自動完成小部件。jQuery更改爲克隆自動填充小部件,只改變原始

所以我的第一個問題是,當新的TR被添加時,死者自動填充小部件不再是自動填充小部件 - 它只是一個普通的舊文本字段。這是有道理的,因爲我將不得不爲新創建的元素應用新的$(foo).autocomplete(bar)。

所以我的下一個問題是當我嘗試重新應用$(foo).autocomplete(bar)到克隆的元素時,它似乎改變了原始元素而不是新的克隆!我在調用$(foo).autocomplete(bar)的同時,對相同的元素進行了其他更改,其他更改也可以正常工作(標識和名稱)。在克隆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(「破壞」)方法來恢復克隆的元素回只是一個普通的文本字段,這樣我就可以然後重新應用.autocomplete(嘗試),它實際上從兩個刪除它元素 - 不是我想要的。不過,我瞭解到,jQuery UI不支持克隆,所以顯然它克隆的元素,但克隆和原始共享相同的部件或任何東西。

我仍然在尋找這個問題的遞歸解決方案,因爲我有4個類似的功能和每行7個不同的元素需要autocompletes - 顯然我不想複製和粘貼代碼28次,每次改變一些東西時都要重複。

回答

1

您是否嘗試過使用jQuery Live關鍵字和自動完成功能?

編輯

我有我使用的自動完成插件類似的問題。

我也在前段時間做了這樣的事情;

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

我創建了控件後,它工作正常。

+0

所以你做到了,而不是.autocomplete()?或之後?參數是否相同? – jreed121 2011-05-04 17:12:57

+0

我不知道這些參數是否相同。您使用的控件與我所做的不同,因此我懷疑不是。我試圖做的一點是,使用Live()關鍵字時,創建控件時會附加事件。或者,正如我以後所做的那樣,當我將新控件放在頁面上時,我接着調用jQuery方法來實例化插件。 – griegs 2011-05-05 02:41:07

相關問題