[英]JavaScript unintentionally “translates” DOM element id string into DOM object reference?
[英]Javascript Dom element ID assigned to JS object? Am I insane or…?
Hokay,所以我最近調試了我們的應用程序在某些移動瀏覽器上的JS問題,解決方案給我的啟示似乎完全是瘋了:
我的問題是,當我在一個對象上調用一個函數時,在股票android瀏覽器和iOS Safari(其他地方),它會返回一個錯誤,該對象沒有這樣的功能。 我想,標准錯誤...除了我之前明確定義該對象和函數 - 作為偽命名空間,如
var varname = varname || { ... }
現在,之前沒有創建'varname'作為JS對象,所以|| 只是為了安全,因為這些插件被稱為一堆...但在某種程度上我無法解釋,來自頁面早期的<section>
,其中id =“varname”,已經在那個js對象中了。
這怎么可能? 也許它只是遲到了,我忽略了一些東西,但它看起來像某個地方我的HtmlElements被分配給id為var name的javascript對象。
我只編寫了3.5年的js,但要么我發現了一些奇怪的錯誤,要么必須認真地重新評估我對JS的了解。
以下是任何懷疑論者的確切代碼(JSTL提供了ID的一部分,但我認為這與它無關):
<section id="attr<c:out value="${thisFieldAndAttrs.id}" />" class="attr"> ...
然后幾百行(但沒有提到任何attr ###),我去創建一個對象:
var attr<c:out value="${thisFieldAndAttrs.id}"/> = attr<c:out value="${thisFieldAndAttrs.id}"/> || { ...
和對象ALREADY EXISTS,作為<section>
HTMLElement的一個實例。 這種情況發生在所有瀏覽器上,但較新的瀏覽器似乎知道足以覆蓋對象(?)。 我唯一的外部腳本是JQuery,據我所知,如果你可以通過Javascript中的ID引用HTMLElements,那么首先不會刪除使用JQuery的大量便利嗎? 我查看了他們的文檔,但在任何地方都找不到這個。
這是一個錯誤嗎? 或者只是意想不到的功能? 或者我在這里遺漏了一些東西......
在某些瀏覽器(全部?)中,具有ID的元素將在窗口上自動生成具有所述Id的屬性。 但是,如果你聲明變量,它應該覆蓋它,但是這幾乎打破了你正在做的事情。 我建議直接在窗口上聲明它,如果它是需要其他腳本可用的東西。
<div id="section"></div>
<script>
console.log(section); // div element
(function(){
var section = section || {};
console.log(section); // object
window.section = section;
})();
console.log(section); // object
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.