2011-07-10 38 views
2

我正在使用Chrome擴展程序,並且我在調用的click()方法僅在將其粘貼到擴展檢查器的控制檯後才起作用。jQuery只適用於將其粘貼到控制檯中時

標記是像這樣:

<ul id="results-list"> 
    <li><a href="#">something</a></li> 
    <li><a href="#">something</a></li> 
    ... and so on ... 
</ul> 

所以,沒有什麼特別的,真的。但是,這些<li><a>...</a></li>正在基於從表單提交返回的json數據進行填充。所以,我認爲這與onReady()中沒有的元素有關,但我已經嘗試了很多次,將匿名方法(下面)放在onReady之外,在onReady之外,並且在onSubmit之外的&之內,並且仍然沒有運氣。

我jQuery是以下幾點:

$(document).ready(function(){ 
    $('form').submit(function(){ 
    ... make the JSON request & populate the form ... 
    }); 
    $("#results-list a").click(function(){ 
    $('body').width(600); 
    return false; 
    }); 
}); 

任何人有任何見解呢?我在想這是我的.click()方法的位置,或者我不知道的Chrome擴展技術。

謝謝!

+3

對於頁面最初加載之後添加元素,你必須使用'.live()':http://api.jquery.com/live/ –

+0

謝謝,吉姆。這工作完美。 – Connor

+0

沒問題!還有一個'.delegate()'函數。這允許您綁定添加到另一個元素內部的元素(換句話說,從添加的元素的父級上委託一個函數)。我沒有必要使用它,因爲我沒有很多動態添加的元素。如果你有很多列表項,你可能想看看它:http://api.jquery.com/delegate/ –

回答

1

將您的活動進入,因爲你要訪問的DOM的部分回調,直到它從服務器回來不可用:

$(document).ready(function(){ 
    $('form').submit(function(){ 
    // ... make the JSON request & populate the form ... 

    $.ajax({ 
     url: yourUrl, 
     data: yourData, 
     success: function(data) { 
     // Build your list and then: 
     $("#results-list a").click(function(){ 
      $('body').width(600); 
      return false; 
     }); 
     } 
    }); 
    }); 
}); 
+0

嘿喬希,非常感謝你發佈回覆。雖然這可能是一種使它工作的方法,但我發現Jim的解決方案(在我的問題的評論中)是一個更簡單的解決方案。再次感謝你。 – Connor

+0

沒有問題。這比使用'.live()'的開銷稍小,但取決於你的需求,這可能不會成爲問題。 –

相關問題