前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >button元素的id与onclick的函数名字相同 导致方法失效的问题

button元素的id与onclick的函数名字相同 导致方法失效的问题

作者头像
陈灬大灬海
发布于 2019-01-28 03:32:48
发布于 2019-01-28 03:32:48
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

需求需要在原先页面添加一个按钮,触发一个function,如此简单的操作,却无意间发现了一个问题。(还是对html了解的太少)

先看下在菜鸟教程的示例(错误代码)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
    function dianji(){
        $("input[name='city']:checked").each(function(){
            alert($(this).val());
        })
    }
</script>
</head>
<body>
    <form>
        <input type='button' id='dianji' onclick='dianji()' value='获取选中的城市'/><br /> 
        <input type='checkbox' name='city' value='北京'/>北京 <br /> 
        <input type='checkbox' name='city' value='上海'/>上海 <br /> 
        <input type='checkbox' name='city' value='天津'/>天津 <br /> 
        <input type='checkbox' name='city' value='重庆'/>重庆 <br /> 
    </form>
</body>
</html>

这个时候点击会出现Uncaught TypeError: dianji is not a function

为什么会这样呢?一看没啥毛病啊,function是绝对定义的。

之后可以将框中的代码一出form,变成如下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
    function dianji(){
        $("input[name='city']:checked").each(function(){
            alert($(this).val());
        })
    }
</script>
</head>
<body>
    <input type='button' id='dianji' onclick='dianji()' value='获取选中的城市'/><br /> 
    <form>
        <input type='checkbox' name='city' value='北京'/>北京 <br /> 
        <input type='checkbox' name='city' value='上海'/>上海 <br /> 
        <input type='checkbox' name='city' value='天津'/>天津 <br /> 
        <input type='checkbox' name='city' value='重庆'/>重庆 <br /> 
    </form>
</body>
</html>

这个时候就正确了,可见是form的问题,原因

form中的input属性的值已经作为当前form的属性了,由于作用域问题,onclick访问的是form的dianji属性而不是外部的函数。

【dianji()会默认传递一个隐性参数this,此时的this代表的是form表单对象,会优先调用表单的属性,即dianji(this),而不是调用window对象的dianji()方法】

解决方法:

  • 修改id名不要与函数名相同
  • onclick="dianji()"改为onclick="window.dianji()"表明是window对象的属性
  • 使用jquery的事件绑定

踩过的坑总结下,共勉

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-01-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【在线五子棋对战】五、前端扫盲:html && css && javascript && ajax && jquery && websocket
开始标签中可能会带有 “属性”。id 属性相当于给这个标签设置了一个唯一的标识符(比如身份证号码)
利刃大大
2025/06/13
480
【在线五子棋对战】五、前端扫盲:html && css && javascript && ajax && jquery && websocket
python测试开发django-113.使用Bootstrap框架
前端页面开发用到bootstrap框架,有2种实现方式: 1.直接在html头部导入css和js文件 2.下载bootstarp课件源码到项目本地放到static目录
上海-悠悠
2021/09/14
3480
vue快速学习02、基础用法
vue快速学习02、基础用法 目录 vue快速学习02、基础用法 1、数据双向绑定 2、数据绑定 3、钩子函数 4、created函数用法1 5、created函数用法2 6、filters过滤器 7、v-once与v-text 8、数据计算 9、数据绑定 10、样式控制1 11、样式控制2 12、v-if 14、v-on 15、watch 16、v-for 17、computed 18、table增加操作 19、table删除操作 20、table修改 21、template 22、componen
红目香薰
2022/11/30
1K0
vue快速学习02、基础用法
python测试开发django-114.ModelForm中局部钩子(clean_)和全局钩子校验
在实际开发中,不仅仅是对输入框字符的格式校验,比如注册功能,注册账号还得校验数据库是否已经有账号被注册过了。 有些场景不仅仅是对单个输入框的字符校验,比如修改密码的时候,会涉及2个输入框的数据格式校验,像这些复杂的场景校验需用到校验钩子来实现。 校验form表单数据合法性,is_valid()方法调用顺序:
上海-悠悠
2021/09/14
7020
jQuery基础
使用jQuery时, $ 是访问jQuery的标志,但是如果有其他方法与jQuery中的 $冲突时,可以释放$的使用权 ,还可以自定义一个符号来代替 $使用。
不愿意做鱼的小鲸鱼
2022/08/24
1.9K0
jQuery基础
jQuery 教程
菜鸟教程 — jQuery 教程:https://www.runoob.com/jquery/jquery-tutorial.html
全栈程序员站长
2022/09/03
18.2K0
jQuery 教程
jQuery的checkbox传值问题
最近不知道要写什么了,没有怎么学习新的知识点,而是一直在研究jquery相关的东西,有人说jquery已经快要过时了,很多公司都不用这个框架了,但是我觉得,有些知识,作为基础,还是要多回顾一下,记录一下。今天写了一个简单的功能,将checkbox选中的value值提交到后端。
王小婷
2020/11/30
2.3K0
bootstrap 表单 1
form role='form' div class='form-group' label for='name' input type='text' class='form-control' id='name' placeholder='请输入姓名' <div class="checkbox"> <label> <input type="checkbox"> 请打勾 </label> </div>
用户5760343
2022/01/10
4560
bootstrap 表单 1
FastAPI 学习之路(四十六)WebSockets(三)登录后才可以聊天
上一篇我们分享了FastAPI 学习之路(四十五)WebSockets(二),上次我们实现的token是基于前端直接产生的token呢,这次我们分享基于登录退出实现token的记录。
雷子
2021/09/17
8440
bootstrap 表单 横向排列
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
用户5760343
2022/01/10
1.3K0
bootstrap 表单 横向排列
jQuery开发补充笔记
[TOC] 0x00 前言简介 什么JQuery? jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架
全栈工程师修炼指南
2020/10/23
4.8K0
jQuery开发补充笔记
bootstrap 文本处理
<meta name="viewport" content="width=device-width, initial-scale=1" charset="utf-8">
用户5760343
2022/01/10
1.4K0
bootstrap 文本处理
bootstrap 表单 2 input
<input class='form-control input-lg'> input-sm 设定input的高
用户5760343
2022/01/10
9290
bootstrap 表单 2 input
jQuery 简介
https://www.runoob.com/jquery/jquery-syntax.html
zhangjiqun
2024/12/17
2730
jQuery 简介
day03_js学习笔记_03_js的事件、js的BOM、js的DOM
day03_js学习笔记_03_js的事件、js的BOM、js的DOM ============================================================================= ============================================================================= 涉及到的知识点有: 五、js的事件 1、js的常用事件 onclick
黑泽君
2018/10/11
28.6K0
JavaScript|jQuery基础语法
jQuery 是一个 JavaScript 库,它极大地简化了 JavaScript 编程。jQuery是一个轻量级的"写的少,做的多"的JavaScript库。
算法与编程之美
2020/07/28
9070
JavaScript|jQuery基础语法
python测试开发django-51.Ajax发送post请求登录案例
我想实现一个登录功能:登录的接口是另外一个地方提供,页面上点登录按钮的时候,先访问登录接口,根据接口返回json信息判断是否登录成功,登录成功页面跳转,登录不成功,在登录首页显示失败原因
上海-悠悠
2019/05/06
1.3K0
python测试开发django-51.Ajax发送post请求登录案例
bootstrap 表单 常用样式
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
用户5760343
2022/01/10
9380
bootstrap 表单 常用样式
jQuery开发补充笔记
[TOC] 0x00 前言简介 什么JQuery? jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架
全栈工程师修炼指南
2022/09/29
1.7K0
jQuery开发补充笔记
javaWeb核心技术第五篇之jQuery
- 概述 - jQuery是一个优秀的javascript框架(js类库),兼容css3和各大浏览器,提供dom,events,animate,ajax等简易的操作。并且jQuery有非常丰富的插件,大多数功能都有相应的插件解决方案。jQuery的宗旨是write less, do more. (写的更少,做的更多) - jQuery入门 - jQuery和html整合 - 下载 - 下载地址:www.jquery.com - 使用script的src属性即可
海仔
2019/08/26
8.3K0
相关推荐
【在线五子棋对战】五、前端扫盲:html && css && javascript && ajax && jquery && websocket
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验