zoukankan      html  css  js  c++  java
  • html页面调用js文件里的函数报错onclick is not defined处理方法

    今天处理html标签里的onclick功能的时候总是报错:Uncaught ReferenceError: dosave is not defined(…)

    找了半天都没发现错在哪,最后发现原来是我写法不对,正确写法如下:

    html:

    <input type="button" value="立即登录" οnclick="dosave();"/>

    js:

    1. dosave = function (){
    2. alert("成功啦!");
    3. }

    错误写法一般有以下两种,很致命:

    1. function dosave(){
    2. alert("会报错!!");
    3. }

    1. var dosave = function (){
    2. alert("会报错!!");
    3. }

    为什么会这样,因为:

    html页面调用js文件里的函数,写法必须为dosave = function (){}形式,其他方式写,html页面会搜索不到该函数。
     

    ------------------------------------------------------------------分割线----------------------------------------------------------------

    上面是2016年11月11日的博客原文,三年来这个帖子争议非常大,帮助了很多朋友,也坑了很多朋友。在此感谢大家的回复,我把所有评论内容总结一下,希望能有帮助。

    1.这个问题很奇特。很多同学平常使用var dosave = function(){}和function dosave(){}都没问题,但是突然一天出现用不了的情况了,我当时就是这样的情况;还有的同学在HBuidlder运行没问题,换eclipse就不起作用。

    2.这三种定义函数的写法都是正确的,只不过作用域不同。

    3.我们知道var dosave = function(){}和function dosave(){}是等价的,是最常用的定义函数方式,区别在于function dosave(){}可以进行声明提升,而var dosave = function(){}必须先定义才能使用。

    4.dosave = function(){}的写法会把dosave函数作为全局作用域函数,相当于windows对象作为他的作用域,所以可以被调用到。

    5.有同学给出了一种解决办法,不过我当时就没用$(functiong{ }),所以对我的情况不管用:

    1)定义的方法 用funcation 方法名(){} ,这样写没有问题,不过js中千万别把方法写在$(functiong{ })中,这样相当于方法中方法,所以查找不到。

    2)将方法放在 $().ready(function () {});之外后,就可以正常执行了。

    6.当大家遇到莫名报错时这三种定义函数的写法都试试吧,说不定能帮助到大家,算是提供一种思路。

    再次感谢大家的深入研究和回复,有问题希望大家多多回复,我会继续跟进这个问题,把更好的答案提供给大家。谢谢!

    原文:https://blog.csdn.net/ywl570717586/article/details/53130863

  • 相关阅读:
    Enterprise Library Step By Step系列(一):配置应用程序块——入门篇
    Enterprise Library Step By Step系列(八):日志和监测应用程序块——进阶篇
    在ASP.NET页面中冻结DataGrid的列或头部
    数据库设计技巧系列(五)——各种小技巧
    用任务计划实现数据库的异地备份
    如何更好的与人沟通?[图]
    在Asp.net中如何用SQLDMO来获取SQL Server中的对象信息
    SQL Server 2012 Express LocalDB
    Clay: 创建和使用深层次对象图
    VS 2012 的 单元测试 和 测试资源管理器
  • 原文地址:https://www.cnblogs.com/showcase/p/12526893.html
Copyright © 2011-2022 走看看