javascript - 关于html中form标签的奇怪现象(目测能上每周推荐)
PHP中文网
PHP中文网 2017-04-11 10:08:54
[JavaScript讨论组]
<html>
<head>
    <script>
        alert(window.selectType.value);
        function selectType() {
            alert("change");
        }

    </script>
</head>

<body>
<form>
     <input type="text" id="selectType" value="1" onchange="selectType();"/>
</form>
<script>
    alert(window.selectType.value);
    //    function selectType() {
    //        alert("change");
    //    }

</script>
</body>
</html>


一次偶尔的机会,写了id和方法名一样,于是后出现了奇葩现象,onchange的时候会报错说selectType不是一个方法。
经过各种调试后,终于发现,如果把form标签删掉,就能正常触发onchange方法。不过window.selectType.value还是依然有错。
可有大神能解释解释这里form标签究竟干了什么?

PHP中文网
PHP中文网

认证0级讲师

全部回复(4)
怪我咯

摘自:《JavaScript权威指南(第6版)》

17.3.3 事件处理程序的作用域
另一方面,HTML事件处理程序中修改的作用域链是陷阱之源,因为作用域链中每个对象的属性在全局对象中都有相同名字的属性。例如,由于Document对象定义(很少使用)open()方法,因此HTML事件处理程序想调用Window对象的open()方法就必须显式地写window.open而不是open。表单有类似的问题但破坏性更大,因为表单元素的名字和ID在包含的表单元素上定另一方面,HTML事件处理程序中修改的作用域链是陷阱之源,因为作用域链中每个对象的属性在全局对象中都有相同名字的属性。例如,由于Document对象定义(很少使用)open()方法,因此HTML事件处理程序想调用Window对象的open()方法就必须显式地写window.open而不是open。表单有类似的问题但破坏性更大,因为表单元素的名字和ID在包含的表单元素上定义属性(见15.9.1节)。例如,如果表单包含一个ID是"location"的元素,那么要是表单的所有HTML事件处理程序想引用window的location对象,就必须使用window.location而不能是location。

http://www.cnblogs.com/realwa...

PHP中文网
<html>
<head>
    <script>
        function selectType() {
            alert("change");
        }

    </script>
</head>

<body>
<form>
     <input type="text" id="selectType" value="1" onchange="window.selectType();console.log(selectType);"/>
</form>
</body>
</html>

试了一下应该是form标签下的id都被声明为局部变量指向了标签,想访问外面的得用window.selectType。

伊谢尔伦

呵呵

迷茫

我是来看答案的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号