2009-04-21 148 views
1

我無法讓我的模態窗口函數綁定到一些返回的數據。我使用的是Cody Lindy的http://swip.codylindley.com/DOMWindowDemo.html">Jquery.DomWindow插件請注意,除了這個問題,所有的功能都正常工作jQuery .getJSON函數需要重新綁定返回的數據

當返回的數據出現問題從我jQuery.getJSON調用包含是應該打開模態窗口的某條鏈路然而,不被認可的DOM,因此不受任何約束功能

我jQuery的功能是:。

$(".deleteThis").live("click", function(){ 
    var $this = $(this); 

    $.getJSON(this.href, function(data) { 
     if(data.success == '1') { 
     $this.parent().html('<span style="background:#f1ffd6;padding:5px;">' +data.msg+'</span>');   
     } 
     else if(data.success == '2') { 
     $this.parent().html('<span style="background:#f1ffd6;padding:5px;">' +data.msg+'</span>');   
     }  
     else {alert("Failure (most likely our fault).");} 
    }); 

    return false; 
}); 

jQuery發送的php腳本包含一些數據庫腳本(因爲它不相關,所以下面沒有顯示)。re返回JSON陣列東昇PHP代碼是這樣的:

if($del ==1){ 
    $msg= "$name has been deleted. (<a href='media/delete_coll.php?cid=$cid&delete=0' class='deleteThis' >undo</a>)"; 
    print json_encode(array("success" => 1,"msg" => $msg)); 
} 

if($del ==0){ 
    $msg= "$name <a href='media/editCollab.php?coll=$coll_id' class='absoluteIframeDOMWindow'>edit</a> 
    <a href='media/delete_coll.php?cid=$coll_id&delete=1&coll=$coll' class='deleteThis' > delete</a> | 
    Collaborator has restored."; 
    print json_encode(array("success" => 2, "msg" => $msg)); 
} 

回答

1

這是發生,因爲插件結合在頁面加載事件處理程序,然後你添加的事實後,動態內容的網頁。最簡單的解決方案是將任何你想要將DomWindow插件安裝到一個函數中的代碼,並在頁面加載時調用一次,並在添加新鏈接時再次調用它。如果它開始雙重綁定已經存在的鏈接,那麼你就必須給動態鏈接一個不同的類並且第二次爲該類安裝。

編輯

似乎這裏是一些誤解,所以我會進一步解釋:

jQuery的live功能(你正在使用.deleteThis)的設計來解決問題你正擁有的。您可能已經知道這一點,因此您正在使用它。上面的段落是因爲我相信你所說的是,你正在返回的DomWindow edit鏈接並不像你期望的那樣打開DomWindow。這是因爲DomWindow在內部不使用live來綁定事件。因此,當您在頁面加載時最初安裝DomWindow時,鏈接會受到約束,但新鏈接不會。如果你願意編輯插件的源代碼,你可以直接使用live來解決這個問題,但是隻要將代碼移動到一個函數並且隨時調用它就會更容易(儘管不是「乾淨」的)向頁面添加更多內容。

+0

.live事件(superUntitled正在使用)應該處理任何當前和將來的元素,稱爲「.deleteThis」。 – 2009-04-21 19:01:23