2012-12-10 116 views
2

這是我的第一篇文章,所以要溫和。 :)jquery:添加一個功能新的div

我有我的頁面上的鏈接。

我想要的鏈接,當點擊創建一個新的div。

新的div應該包含相同的鏈接,用於創建這個div, ,這樣我就可以繼續創建包含相同鏈接的新div。

這裏是我的代碼:

<script type="text/javascript"> 

    $(document).ready(searchCriteria); 
    $(document).ready(loadSearchCriteria); 

    function searchCriteria() { 
     $(".test").load("searchCriteria.html"); 
    } 

    function loadSearchCriteria() { 
     $(".test1234").click(function() { 
      $(".test1234").load("searchCriteria.html"); 
      function loadNewClick() { 
       var $newClick = $('<div class="test1234"></div>'); 
        $(".content").append($newClick); 
      } 
     }); 
    }; 

</script> 

我使用jQuery,1.4.2.min.js

我是新來的jQuery,因此任何提示,將appretiated。 THX :)

+0

你不需要兩個'$(document).ready()'。你通常只有一個文檔就緒塊,你想要在dom裏面執行的代碼。 – boz

+0

@boz確實如此,但在這種情況下,它不會損害任何東西,我也不認爲它會使代碼不那麼清晰。 – Blazemonger

回答

0

你需要打電話給你的loadNewClickwhen完成$(".test").load("searchCriteria.html");

$(".test").load("searchCriteria.html", function(){ 
    alert('completed'); 
    //EDIT:: this is your load new click function 
    var $newClick = $('<div class="test1234"></div>'); 
    $(".content").append($newClick); 
}); 
+0

Thx爲迴應。是的,我剛剛創建了一個函數loadNewClick,之後我不打電話,但我不在哪裏調用函數loadNewClick? Sry我是一名webdesigner,所以編程對我來說有些新鮮,儘管我已經閱讀了一些關於它的內容。 – unebune

+0

@unebune您需要這樣做*另外*修復代碼,以便新的div獲得點擊事件。在使用'.load()'之前,我建議使用'.text()'等簡單的東西來工作,然後在工作時回到加載時間問題。基本上,'load()'需要向服務器發送一個請求,所以其他所有代碼都會在請求繼續時繼續執行。當請求完成時,你希望你的代碼發生*,所以你需要告訴'load'來觸發一個回調函數(正如Philippe所做的那樣),它包含了'.load()'完成時運行的代碼。 – user568458

0

試試這個:

$(function() { 
    //document ready 
    $(".test").load("searchCriteria.html"); 
    var $newClick = $('<div class="test1234">Sample div</div>'); 
    $(".content").append($newClick); 
    $($newClick).live("click", function() { 
     $(this).load("searchCriteria.html"); 
    }); 
});​ 
+0

THX,但沒有奏效。現在只是一個靜態鏈接節目和其他nohting:/ unebune

+2

使用'活()'是罰款的jQuery 1.7版本之前 - 在jQuery的1.7及以上,' live()'不推薦使用[替換爲'.on()'](http://api.jquery.com/on/)。此外,這種改編的代碼不會在點擊時創建新的div(但我想這很好,告訴OP有關「live()」的重要位) – user568458

+0

@unebune:您的服務器上是否存在「searchCriteria.html」頁面?? –

0

所以,你要這些新追加的.test1234元素具有相同點擊事件?您可以使用.on()代表點擊事件到類。這有效地將它綁定到任何獲得該新類或舊類的類(.on()替換最近版本的jQuery中的.live())。


但委託事件有(適度)的開銷,對於像這樣簡單的事情來說,這可能過分。在創建新元素時,可以將創建它的函數綁定到它。將事件綁定到像這樣的新創建的元素是方便的"lesser known" jQuery trick

這裏的最重要的一點:綁定,創建了新的div到新創建的div的功能,像這樣(對可讀性新線點擊):

function somefunction() { 
    var $newClick = $('<div class="test1234"></div>') 
    .click(somefunction); 
    $(".content").append($newClick); 
} 

(你也可以使用.click(function() { some code }),或寫爲$('<div/>').addClass('test1234').click(somefunction);,或什麼的,這是非常靈活的)

我測試了這個時候:)這裏是一個jsfiddle展示全碼(使用.text(),而不是​​。

我想你在您的評論中提到的問題是一個不同的問題與您的代碼的結構方式 - 看看在的jsfiddle代碼的修改和註釋,想想什麼時候發生的事情。

改變的事情,打破它,直到它有道理重裝吧:)。



友情提示從一個JavaScript的編碼設計到另一個 - 關於學習真正的編程是讓你的頭部周圍的時機和運動部件(每個事物是在每個點什麼)最難的事情。請記住,在jQuery的東西像.click()綁定事件(click()僅僅是bind('click')一個快捷方式)。當我學習使用.bind('click)而不是.click()(和bind('mouseover')等等)時,我發現它很有幫助,因此當我讀回代碼時,始終直觀地看到發生了什麼以及什麼時候發生了什麼。

此外,使用console.log()了很多。記錄下所有內容並觀察出現的情況。而且,當你的文本編輯器/ jsfiddle/firebug等等是一個無限大寫生,告訴你什麼時候不能工作:這是一件很棒的事情,嘗試一切,犯很多錯誤!這是學習的最佳方式。

+0

wow thx ...這似乎是一個更先進的,不能完全得到它的看法。結果似乎沒有做任何事情,但原來的代碼:點擊功能正常工作時,第一次點擊,但它不會顯示在新的div中:/ – unebune

+0

您是對的 - $ newClick不是添加到頁面的新元素。有一個修復,將回... – user568458

+0

@unebune - 我發現時間來更新它與精緻的代碼和一個jsfiddle在上下文中演示它。 – user568458