`
yipsilon
  • 浏览: 246303 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

JavaScript 中一个比较无奈的问题,大家注意了!

阅读更多

正常获取表单的ID值的语法为:<表单对象>.id,这个大家都知道。不过下面的代码,看看会返回什么:

  1. <form id="create_data">      
  2.   <input type="hidden" name="id" value="hello"/>      
  3. </form>      
  4. <script type="text/javascript">      
  5.   alert(document.getElementById('create_data').id);       
  6. </script>   

弹出对话框在IE下显示的内容为“[object]”,这个对象是那个名字为id的INPUT元素,FF还没有测试,估计也是出错。:(

大家在开发程序的时候一定要注意哟!!!

分享到:
评论
18 楼 cai555 2007-12-10  
建议使用:document.getElementById('create_data').getAttribute("id", 0)
17 楼 yipsilon 2007-11-29  
list的,在js里不就是数组么。[1, 2, 3, 4, 5]
map的,在js里是litral。{name:'hello',value:'world'}
16 楼 zjh0588 2007-11-09  
请问ArrayList<String[]> list ,javascript能描述出里面的数据吗?
15 楼 hax 2007-11-08  
恭喜楼主,又发现了偶曾经发现过的bug。

See: https://bugzilla.mozilla.org/show_bug.cgi?id=322488
See also: http://topic.csdn.net/t/20060118/23/4524484.html

14 楼 slaser 2007-11-05  
<input name="id"/>这样的东西我还是经常用的,没办法嘛,数据库里面对应的pk一般就叫id.只是我不会去读form的id,这个有什么实用价值么?
13 楼 metaphy 2007-11-01  
有一种东西,叫做关键字,还有一种东西,叫做保留字
12 楼 afcn0 2007-11-01  
是ie混淆attribute和对象属性,ff下面getAttribute最标准,id是不会返回对象的
11 楼 niuyuewanzi 2007-11-01  
这个例子我觉得有点意思. DOM中FORM有ID属性,且正常情况下,应该返回"create-data",但是这里返回的是INPUT 的ELEMENT,无论是IE还是FF.

因为: document.getElementById('create_data').id.nodeName 返回的是INPUT. 当你把INPUT BOX的NAME改为比如'ID1'的时候,document.getElementById('create_data').id返回的就是'create_data'了.

这背后说明了什么?ACCESS其他ELEMENTS先于ACCESS PROPERTIES??希望有人指点....
10 楼 afcn0 2007-10-30  
刚又测了下,name="id"甚至影响了getAttribute的行为
alert(document.getElementById('create_data').getAttribute("id"));和".id"以及["id"]一样

alert(document.getElementById('create_data').getAttribute("id",2));
是null,name="id"好象覆盖了原来的id属性了,原来的id属性已经丢失了在ie下
9 楼 无聊神灯 2007-10-30  
alert(document.getElementById('create_data')["id"]);     
8 楼 afcn0 2007-10-30  
其实没什么大不了,lz说的".id"根本不是标准方法,那是在没有DOM之前的DOM 0级API,正确方法是getAttribute,当然就是今天ie也不支持setAttribute的事件绑定,这些老API设计时多少都有点bug
7 楼 lianwu 2007-10-30  
名字取成ID的确实牛NR
6 楼 fyting 2007-10-30  
把名字取成id的少见,但把按钮id取成submit的不少...
5 楼 afcn0 2007-10-29  
ls不是那样的,不管getELementById或者getElementsByTagName不论ie ff都会把下属元素的id name扩展为自己的属性,所以alert(document.getElementById('create_data').id);在ff下一定会得到input元素,这是毫无疑问的,看下面代码
<input id="length" value="22" type="text" />
<input id="aaa" name="bbb" type="reset" />
<script>
alert(document.getElementsByTagName("input").length)
</script>

这个才是bug,ie还是扩展length导致无法遍历元素,而ff却保护了length属性,没有覆盖,id被覆盖很正常,你可以getAttribute吗
4 楼 ajaxgo 2007-10-29  
二楼不要不知根源的在那里乱说
实际情况是这样的,lz最后的考虑也有错,在FF下是不会错的。
因为在ie下,可以通过"表单对象.字段name"来直接访问表单里的字段对象,即form.fieldName,所以上例中,当获得了表单对象后,其中的id属性其实已经变成了那个input控件,于是访问后得到[object]那是正常的。而如果根据二楼所说,要加.value那是什么情况呢?当然是取得那个input控件的value属性值。
由于这个是ie下的特有方式,所以在ff下,不会产生上述的情况,object.id返回的,还是正常的元素id号。
3 楼 weiqingfei 2007-10-29  
能把元素名取为“id”的人也是蛮有创意的人。
2 楼 weishuwei 2007-10-29  
晕死,这个当然要返回一个对象啊,你又不是求值的.alert(document.getElementById('create_data').id.value);你试一下
1 楼 simon1118 2007-10-29  
呵呵,楼主真是细心啊~!

相关推荐

    JavaScript_内存泄露

    对于闭包,它们是JavaScript中一个强大的特性,允许函数访问并操作外部作用域的变量。然而,闭包也会带来潜在的内存问题,因为它们可以保持对外部作用域的引用,即使外部作用域已经不再需要。这种情况下,如果闭包和...

    学用JavaScript设计模式

    在JavaScript编程中,设计模式同样具有重要意义,可以帮助开发者以一种优雅的方式组织代码,解决常见的编程问题。 本书《学用JavaScript设计模式》主要面向有一定JavaScript基础知识的专业开发者,旨在帮助他们提高...

    JavaScript函数的特性与应用实践深入详解

    闭包是JavaScript中一种非常有用的特性,它允许内部函数访问外部函数的作用域链,即使外部函数已经执行完毕。闭包的这种能力为JavaScript提供了强大的抽象能力,但也可能导致内存泄漏,特别是在长时间运行的循环或...

    在JavaScript中typeof的用途介绍

    总结而言,typeof是JavaScript中一个用来检测变量类型的有用工具,但开发者在使用时应注意其对于null的特殊返回值。同时,对于检测变量是否已声明、数组和函数等类型的特殊返回值,开发者都应该有所了解,以避免在...

    javascript经典特效---动态打开全屏窗口.rar

    总结起来,动态打开全屏窗口是JavaScript中一个实用且有趣的特性。通过合理地使用`requestFullscreen`及其兼容性方法,以及监听`fullscreenchange`事件,我们可以创建出一个流畅的全屏体验,提升网页的交互性和视觉...

    javascript闭包的理解

    这个特性使得闭包成为JavaScript中一个非常有用的工具,尤其是当我们需要模拟私有变量和方法时。 闭包可以通过在外部读取局部变量来实现。在函数内部定义的函数(称为嵌套函数)可以访问定义它的外部函数的局部变量...

    javascript刷新

    页面刷新是网页应用中一个常见的需求,尤其是在实时数据更新、表单提交后重置、或者用户操作后需要重新加载页面的情况下。本文将详细解析在描述中提及的“关于页面刷新的JavaScript脚本”,并提供一个实际的代码示例...

    javascript中一些数据类型以及奇怪的特性

    - 闭包是JavaScript中一个强大的特性,它允许函数访问并操作其外部作用域的变量,即使在其外部作用域已经销毁的情况下。 9. **原型链(Prototype Chain)** - JavaScript的继承是通过原型链实现的,每个对象都有...

    重新认识JavaScript

    1. **闭包(Closure)**:闭包是JavaScript中一个非常重要的概念,它允许一个函数访问并操作其作用域之外的变量。闭包的存在使得JavaScript能够支持内存泄漏以外的一些高级功能,如私有变量和模块模式。 2. **事件...

    javascript闭包

    闭包是JavaScript中一种非常强大的特性,它允许我们创建出能够访问其创建时作用域中变量的函数。通过合理使用闭包,我们可以实现很多高级功能,如私有变量、延时执行等。然而,不正确的使用闭包也可能会导致内存泄漏...

    javascript操作Select标记中options集合

    9. **浏览器兼容性**:博客中提到的`select_Option(这个支持FF).html`可能是指该示例在Firefox浏览器上已测试通过,但需要注意其他浏览器如IE、Chrome、Safari等的兼容性问题。 通过这些知识点,开发者可以有效地...

    javascript里的闭包是什么 什么是闭包.zip

    JavaScript中的闭包是一种重要的编程...总的来说,闭包是JavaScript中一个强大的工具,它帮助我们实现许多高级功能,但同时也需要注意合理使用以避免潜在的问题。理解和掌握闭包对于提升JavaScript编程能力至关重要。

    Javascript中eval函数的详细用法与说明

    eval 函数是 JavaScript 中一个非常强大且灵活的函数,它可以将一个字符串当作一个 JavaScript 表达式一样去执行它。以下是 eval 函数的详细用法和说明: eval 函数的功能 eval 函数的主要功能是将一个字符串当作...

    Javascript 闭包完整解释

    闭包是JavaScript中一种非常强大的功能,它允许函数记住并访问其外部作用域中的变量。通过合理使用闭包,可以大大提高代码的灵活性和可维护性。然而,也需要警惕闭包可能导致的内存泄漏等问题。掌握闭包的工作原理...

    cbl16888-WebViewJavascriptBridge-master_javascript_

    WebViewJavascriptBridge是iOS和Android开发中一个非常实用的工具库,它提供了一种在原生应用(Native App)和嵌入其中的WebView之间进行数据通信的桥梁。这个库使得JavaScript与Objective-C或Java之间的交互变得...

    BigIntJavaScript中的任意精度整数

    在JavaScript的世界里,数据类型是基础且至关重要的。在标准的数据类型中,`Number`...总的来说,BigInt是JavaScript中一个强大的工具,为处理大整数提供了必要的支持,使得JavaScript在面对高精度计算时不再捉襟见肘。

    javascript中eval和with用法实例总结.docx

    `eval`是JavaScript中一个非常强大的内置函数,它可以将字符串解析并执行为JavaScript代码。这使得开发者能够在运行时动态地创建和执行代码。 ##### 2. 语法 ```javascript eval(strScript) ``` - **参数**: - `...

    【JavaScript源代码】用JS创建一个录屏功能.docx

    录屏功能是现代Web开发中一个非常实用的功能,特别是在在线教育、远程协作和游戏直播等领域。JavaScript作为浏览器端的主要编程语言,提供了实现这一功能的能力。本文将详细介绍如何使用JavaScript创建一个简单的...

Global site tag (gtag.js) - Google Analytics