2014-02-13 69 views
1

我在我的頁面上使用了一個iframe,它由具有輸入元素的表單組成。每個輸入元素都有一個onblur()事件,用於驗證輸入。IE 8 iFrame在第一次加載時會導致JavaScript錯誤

當我在IE 8中打開一個全新清除緩存的頁面時,它會產生一個像這樣的javascript錯誤。

document.getElementById(...)' is Null or not an Object 

然而,當我檢查的形式,它是完全加載,我想訪問的呈現方式。 此外,當我重新加載整個頁面,我不再有任何錯誤。 另外,當我自己加載iframe的內容時,我也不會收到錯誤。

Firefox和Chrome不會拋出任何錯誤。

簡而言之,我得到的Javascript錯誤只出現在IE中,並且只有當我使用iframe來顯示窗體(這是強制性的)並且僅當第一次加載頁面時。

關於如何解決這個問題的任何想法?

我希望它不要太困惑。

編輯:

document.getElementById("vHint_"+fieldName).innerHTML=data; 

字段名是輸入字段的ID。數據是驗證的返回值。 在這種情況下,數據是圖像標籤。 每個輸入字段都是標識爲「vHint _」+ fieldName的跨度標籤。

的事件附加這樣的:

所有的
<input id="Jahr" class="input" type="text" onblur="validDate(this,'Jahr','_beginn')" maxlength="4" style="width:32px" value="" name="Jahr"> 
+0

因此,'onload'你通過'getElementById()'做了一個循環,並附上'onblur',這裏是錯誤發生的地方? – user13500

+0

用戶在輸入元素中輸入數據後觸發onb​​lur。然後驗證輸入,然後使用getElementById()來顯示輸入是否正確。 – Drai

+0

你可以添加你的代碼你使用的getElementId()錯誤在哪裏 – 2014-02-13 08:47:31

回答

1

首先感謝你的努力。 提供的示例user13500就像一個魅力。 它讓我更深入地挖掘。

我找到了解決方案。

所有輸入字段都是使用自制的ASP框架創建的,它將所有輸入字段都放入Session中。 iframe中輸入字段的onblur()事件觸發對ASP文件的AJAX請求,將請求參數傳遞給輸入字段的名稱。 ASP文件現在嘗試在Session中查找字段並檢索其值以驗證輸入。 之後,結果被髮回到javascript文件,然後使用document.getElementById("vHint_"+fieldName).innerHTML=data;將結果返回到頁面中。

這通常沒有erros工作。 但是,由於應用程序在iframe中運行,並且周圍頁面的域和iframe中的應用程序不同,IE會拒絕iframe的會話。因此,ASP驗證的結果是空的,因爲它無法在會話中找到該字段。

已經想通了這一點是必須做的唯一的事情是添加這行代碼中的應用:

Response.AddHeader "P3P", "CP=""CAO PSA OUR""" 

這樣IE並不駁回其申請的會議了。 也許這對其他人也有用。

相關問題