2013-09-24 63 views
1

我正在使用JQUery treeview插件來顯示我的數據作爲樹結構。 問題是我從JSON響應對象動態生成我的HTML。 這不會按預期工作。這些元素沒有獲得點擊事件的註冊。jQuery註冊click動態HTML樹插件事件

如果我對動態HTML進行硬編碼,我可以按預期看到結果。我調試並瞭解JQuery爲現有的HTML元素註冊點擊事件,但不是動態形成的元素。請讓我知道如何註冊點擊事件。

function show(jsonResp) { 
    //Parsing the JSON response and building HTML on the fly. 

    $red = ''; 
    for (var i = 0; i < treeElements.length; i++) { 
     $red = $red + treeElements[i]; 
    } 

    $("#user-records").append($red); 
    $("#red").treeview({ 
     animated: "fast", 
     collapsed: true, 
     unique: true, 
     persist: "cookie", 
     toggle: function() { 
      window.console && console.log("%o was toggled", this); 
     } 
    }); 

} 

此樹視圖代碼正在調用函數以根據用戶單擊事件展開和摺疊。所有這些事件都得到登記treeview.js

this.find("div." + CLASSES.hitarea).click(toggler); 

我在Chrome調試,並檢查了我的新div的越來越與點擊事件註冊的。但是當我點擊時沒有任何事情發生。

P.S:如果我複製生成的HTML元素的控制檯日誌,並創建一個不同的頁面,它可以很好地工作。唯一的問題是動態添加HTML代碼。我無法在這裏註冊這個新添加的動態HTML代碼的點擊事件。

+1

您是否在使用['.on'](http://api.jquery.com/on)將該事件委託給新內容,請添加您正在使用的代碼,以便我們可以看到問題的可能性 –

+0

@ PatrickEvans請看看我添加的代碼。 –

+0

爲什麼用'$'加前綴(一些)你的變量? JavaScript不是PHP。 – ThiefMaster

回答

2

對不起,這是嗎?

$(document).on("click", ".selector", function() { 
    // your code 
}); 

使用此代碼,您可以在生成的內容上綁定事件。這裏有一個例子:http://jsfiddle.net/cB8Tf/

+0

這些點擊事件由treeview插件處理。 this.find(「div。」+ CLASSES.hitarea).click(toggler); 問題是他們沒有發生在我的動態HTML –

1

更改此

this.find("div." + CLASSES.hitarea).click(toggler); 

這個

$(document).on('click', "div." + CLASSES.hitarea, toggler); 

這將導致"div." + CLASSES.hitarea所有未來情況下尊重你給的點擊處理程序。