簡體   English   中英

Javascript Dom元素ID分配給JS對象? 我瘋了還是......?

[英]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>

http://jsfiddle.net/8u8sn/3/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM