2012-01-30 57 views
0

我的jQuery插件有問題。我不能發佈整個腳本,因爲它會太大,這是一個小的和修改後的摘錄。基本上,它的工作原理是這樣的:jQuery的克隆()與孩子和保存到數據()作爲備份元素?

  1. AJAX調用,如果結果集爲空然後備份元素,它的內容(如果沒有已備份的定義)和覆蓋它的內容
  2. 如果結果集包含數據查找其中的某些元素並使用.html()來顯示數據

但上面有些問題。當連續三次執行呼叫時,備份的孩子都是空的!

任何幫助,非常感謝。這裏是控制流程的簡化版本:

var backup = function() { this.data('backup', this.clone(true)); } 

var onObjectProperty = function(obj) { 

    // This is where my script fail!!! 3 consecutive times of empty data, 
    // and children() contains no data! 
    if($.type(this.data('backup')) !== 'undefined') 
     console.log(this.data('backup').children()); 

    }; 

if(!val.error && !val.count) // Not an error, but data is empty 
{ 
    // Keyword "this" is the current element in selection loop (on which 
    // the plugin was invoked) 
    if($.type(context.data('backup')) === 'undefined') 
     backup.call(this); // Backup if not already defined 

    opt.onEmpty.call(context); // Call the function to handle empty data 
    return true; // Skip the current iteration in the loop 
} 

// Here we have no errors and result set contains data 
onObjectProperty.call(this, obj); // Pass the context and the data 

編輯:發現錯誤,將它添加到DOM之前並沒有克隆備份!

回答

1

對於第二個括號,如果 - $。type行是什麼? =)

好吧。不知道如何讀取所有這些「obj」,「context」和「val」,它們是如何適應的,但是爲了設法獲得備份來回數據,請參見下文。

反正很酷的主意!

<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script> 
<script> 
var backup = function() { this.data("backup", this.clone(true)); } 
function doit(x) { if ($.type(x.data("backup")) == "undefined") { backup.call(x); } } 
function dumpit(x) { 
    if ($.type(x.data("backup")) != "undefined") { 
     console.log("backup", x.data("backup")); 
     console.log("children", x.data("backup").children()); 
    } 
} 
function addit(x) { 
    if ($.type(x.data("backup")) != "undefined") { 
     var x = x.data("backup").clone(); 
     x.attr("id",null); 
     $("body").append(x); 
    } 
} 
</script> 
</head> 
<body> 
    <div id="xxx" class="yyy"> 
     <p class="zzz">helu</p> 
     <a href="#">there</a> 
     <input></input> 
    </div> 
    <button onclick="doit($('#xxx'));">do</button> 
    <button onclick="dumpit($('#xxx'));">see</button> 
    <button onclick="addit($('#xxx'));">add</button> 
</body> 
</html> 
+0

固定,結果也沒有改變。 – gremo 2012-01-30 20:12:12

+0

感謝您的努力,+1只是爲了嘗試。去測試它並報告! – gremo 2012-01-30 21:13:30

+0

你讓我的一天!該錯誤並不克隆備份本身(並在修改之後不久)! – gremo 2012-01-30 22:02:29