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

news/2024/7/11 1:40:14 标签: javascript, 前端, html, jquery, ajax
htmledit_views">
html" style="font-size: 16px;">

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

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

<!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,变成如下代码

<!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名不要与函数名相同
  • οnclick="dianji()"改为οnclick="window.dianji()"表明是window对象的属性
  • 使用jquery的事件绑定

踩过的坑总结下,共勉


http://www.niftyadmin.cn/n/606060.html

相关文章

小卡机器人积木教程_一盒56种玩法!这套智能积木机器人秒杀家中99%的益智玩具!| 新年礼物...

每个家庭都少不了积木玩具&#xff0c;才老师以前也团过不错的积木机器人。这次才老师发现去年大受好评的一款机器人智能积木出了升级版—— 百变积木&#xff01;上手玩了一遍后就迫不及待安利给大家&#xff0c;新年礼物可以准备起来了~因为这款 小卡机器人百变积木&#xff…

where条件中使用了is null或is NOT NULL优化器就不允许使用索引了吗

前几天从网上下了一关于SQL优化的PDF&#xff0c;今天有空打开看了下&#xff0c;第一页就写着“任何SQL语句&#xff0c;只要在where条件中使用了is null或is NOT NULL&#xff0c;那么优化器就不允许使用索引了。”。以前没仔细研究过&#xff0c;今天做了下试验&#xff1a;…

java微信公众号JSAPI支付以及所遇到的坑

java微信公众号JSAPI支付以及所遇到的坑 上周做了个支付宝微信扫码支付&#xff0c;今天总结一下。微信相比支付宝要麻烦许多 由于涉及到代理商&#xff0c;没办法&#xff0c;让我写个详细的申请流程&#xff0c;懵逼啊。 笔记地址 http://note.youdao.com/noteshare?id269dd…

kali linux 头文件_Kali-linux准备内核头文件

内核头文件是Linux内核的源代码。有时候&#xff0c;用户需要编译内核头文件代码&#xff0c;为以后使用内核头文件做准备&#xff0c;本节将介绍编译内核头文件的详细步骤。准备内核头文件的具体操作步骤如下所示。(1)更新软件包列表。执行命令如下所示&#xff1a;rootKali:~…

Ubuntu中配置Tomcat与Eclipse整合

Apache Tomcat 作为web服务器已经广泛用于Java Servlets 和 JSP (Java Server Pages) 开发。 环境&#xff1a;Ubuntu10.10 java环境的配置见另一篇文章&#xff1a; 在Ubuntu 10.10下安装JDK配置Eclipse配置j2me http://blog.csdn.net/qp120291570/article/details/6240727准…

(强烈推荐)java连接oracle数据库的各种方法及java在数据库中的含义

java与oracle的接口&#xff1a; 在数据库中运行JAVA可以说是ORACLE8i的最令人激动的新特性。在你创建的使用ORACLE8i 数据库的应用程序中&#xff0c;你可以使用与JAVA有关的新特征&#xff0c;轻松的将程序发布到INTERNET或INTRANET上。Methods for Using Java in ORACLE…

hb100 微波雷达arduino_【Arduino】108种传感器系列实验(119)---HB100多普勒雷达模块...

/*【Arduino】108种传感器模块系列实验(资料代码图形仿真)实验一百一十九&#xff1a;HB100微波雷达感应模块 10.525GHz多普勒探测器探头传感器项目&#xff1a;测试HB100模块,输入改为模拟口A0,三组数据输出*/#define RADAR A0 // RADAR inut is attached to A0#define MICROD…

初遇 Ext3grep

为什么80%的码农都做不了架构师&#xff1f;>>> Ext3grap 是ext3文件系统下的一个开源数据恢复工具&#xff0c;官方下载地址http://code.google.com/p/ext3grep/downloads/detail?nameext3grep-0.10.2.tar.gz 。 它的恢复原理很简单&#xff1a;ext2/ext3 文件系…