2008-09-26 48 views
3

我在做一個web應用一些維護編碼和我得到的形式的JavaScript錯誤:「[的ElementName]有沒有屬性」的代碼JavaScript錯誤:[的ElementName]有沒有屬性

部分是通過AJAX調用即時生成,該AJAX調用改變頁面的一部分的innerHTML,在完成之後,我需要將一段數據從隱藏的輸入字段複製到可見的輸入字段。 所以我們的目標字段:<input id="dest" name="dest" value="0">
和源領域:<input id="source" name="source" value="1">
現在,當阿賈克斯運行它會覆蓋源是在div的innerHTML,所以源字段現在讀取:<input id="source" name="source" value="2">

確定後的JavaScript行復制阿賈克斯數據的InnerHtml下一行是: document.getElementById('dest').value = document.getElementById('source').value;

我得到以下錯誤:Error: document.getElementById("source") has no properties

(我也嘗試過document.formname.sourcedocument.formname.dest和同樣的問題)

我錯過了什麼?

注1:頁面已完全加載且存在元素。 ajax調用只發生在用戶操作之後,並替換元素所在的html部分。

注意2:至於不使用innerHTML,這是代碼庫是如何給我的,爲了刪除它,我會需要重寫所有的ajax調用,這不在當前維護週期的範圍內。注意3:innerHTML用新數據更新,一個包含數據和格式的整個表正在被複制,我試圖在這個大塊的末尾添加一個布爾值,而不是創建一個全新的ajax調用一個布爾值。它看起來就是我將不得不做的......因爲我在最後的黑客,然後複製方法不起作用。

額外的雙眼FTW。

是的,我有一對夫婦的傢伙在這裏工作看看,他們發現我簡單的打字錯誤...我發誓,我有那些開始與正確的,但嘿,我們生活和學習...

謝謝爲幫助傢伙。

+0

你可以發佈一個小的,完全正常的工作例如它複製你的問題? – 2008-09-26 18:05:39

+0

一種方式通過AJAX調用修改調試網頁是在瀏覽器中做一個全選,複製並粘貼到的東西,瞭解HTML(我在設計模式中使用Dreamweaver中新的空白頁)。這會給你最終的HTML。 FireBug等工具也爲您提供這種能力。 – 2008-09-26 18:17:44

+0

用於Firefox的Web開發人員工具欄也可讓您從「查看源代碼」菜單項中查看生成的源代碼。 – 2008-09-26 18:25:07

回答

3

「[的ElementName]有沒有屬性」是JavaScript錯誤說「你試圖引用不存在的元素或者是無」

這意味着你有幾個可能的一個或多個問題:

  1. 您的網頁尚未呈現和你想它存在
  2. 你有拼寫錯誤
  3. 你命名你的身份證一樣保留字之前引用它(例如提交提交按鈕)
  4. 什麼你以爲你在引用你真的沒有(那不是你認爲你傳遞一個傳遞的變量)
-1

通常,您不應該使用innerHTML,而是使用DOM方法創建元素。我不能說這是你的問題。

2

確保您的代碼在頁面完全加載後運行。如果您的代碼在您查找的元素被渲染之前運行,則會發生此類錯誤。

1

你的描述是這樣的功能:

<div id="test2"> 
    <input id="source" value="0" /> 
</div> 
<input id="dest" value="1" /> 

<script type="text/javascript" charset="utf-8"> 
//<![CDATA[ 
function pageLoad() 
{ 
    var container = document.getElementById('test2'); 
    container.innerHTML = "<input id='source' value='2' />"; 
    var source = document.getElementById('source'); 
    var dest = document.getElementById('dest'); 
    dest.value = source.value; 
} 
//]]> 
</script> 

這個工作在常見的瀏覽器(我在IE,Firefox和Safari檢查);您是否使用其他瀏覽器,或者您確定它是否在innerHTML操作中創建了正確的元素?

0

這聽起來像DOM不被新更新元素給我。

對於這個問題,你爲什麼要重寫整個DIV只是改變源輸入?直接改變源代碼的價值不是很容易嗎?

0

這是一個延伸,但可能只是把戲 - 我以前看到這一點,這個破解實際工作。

所以,你說:

Ok after the javascript line that copies the ajax data to innerHTML the next line is: document.getElementById('dest').value = document.getElementById('source').value;

更改該行這樣的:

setTimeout(function() { 
    document.getElementById("dest").value = document.getElementById("source").value; 
}, 10); 

你真的不應該需要這個,但它可能是你設置的innerHTML之間的時間然後試圖訪問「源」元素是如此之快,以至於瀏覽器無法找到它。我知道,聽起來完全沒有用,但是由於某些原因,瀏覽器在某些情況下會出現這種情況,這種情況超出了我的視野。

相關問題