繁体   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