2012-06-07 116 views
1

我有這個片段的HTML:問題與jQuery id選擇

<div class="clearfix" id="menu-file-div"> 
    <label id="menu-file-label" for="id_menu_file">From File</label> 
    <div class="input"> 
     <div id="file-upload"> 

     <input type="hidden" name="menu_file" id="id_menu_file" /> 

      <script type="text/javascript">var field_id = "id_menu_file";</script> 
      <script type="text/javascript">var append_to_element_id = "menu-upload";</script> 
      <script type="text/javascript">var loader_element_id = "newmenu-modal";</script> 
     <noscript> 
      <p>Please enable JavaScipt to upload a file.</p> 
     </noscript> 
     </div> 
    </div>     
</div>  

在我的控制檯,當我嘗試使用jQuery的ID選擇,它未能返回輸入元素:

> $("#id_menu_file") 
[] 

有關這是爲什麼的任何想法?我覺得我錯過了簡單的事情。謝謝!

編輯 - 其他一些javascript被刪除的元素,這就是爲什麼它不顯示。感謝你的幫助。

+1

無法在這裏重現:http://jsfiddle.net/UXGwK/ – xbonez

+0

也許你在'id_menu_file'在DOM之前運行你的jQuery代碼?嘗試在一個'document.ready(function(){'或'$(function(){'。 –

+1

)中包裝你的函數作爲一個便箋,你確實知道你只需要這三行代碼的腳本標記,而不是三,對嗎?如果你喜歡這種風格/格式,給你更多的權力,我只是想檢查你是否是新的(-ish)到Javascript。 – machineghost

回答

1

重複我的第一個答案(這可能適用於其他後閱讀這篇文章,並且已被刪除,它「從根本上回答[編者按]問題「):

Is this HTML inside of a frame (iframe or regular)? That could make it difficult for jQuery to find your element, unless you give it the right context. 

添加上下文jQuery選擇你只需要提供這方面作爲一個額外的參數,例如:$(‘TD’,aFrameElement);

如果有問題的元素不在框架內(這是zallarak的情況),問題幾乎可以肯定是一個時間問題:jQuery的選擇發生在元素加載到頁面之前。您可以通過添加以下代碼(任何地方)驗證這一理論:

$(function(){ 
    console.log($("#id_menu_file")) 
}); 

如果是這樣的問題,只是包裝你的代碼$(function(){來解決問題。

+0

爲了完整性,以後任何人閱讀,有這樣一個問題的三個基本原因1)元素是在一個框架中,2)jQuery選擇器在元素被加載之前運行,3)其他代碼是刪除元素在選擇器運行之前。在這個特殊的情況下,它是3)。 – machineghost

0

嘗試:儘管

$("#id_menu_file").get(0) 

$(選擇)返回數組

+3

它應該仍然顯示數組的元素。 – xbonez

+1

true! ); – mimiz