zoukankan      html  css  js  c++  java
  • $(function(){})里面不能声明定义函数

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    </head>
    <body>
        <div onclick="abc()">测试测试</div>                           
    <script>
        
    $(function(){   
         function abc(){
           alert(123)
         }
    })
       
    </script>
    </body>
    </html>

    在ready函数里这样写会弹出函数未找到

    如果写成这样:

    $(function(){
        $("div").on("click", function(){
          alert(123)
        })
        
    })

    这样会执行成功,或者去掉ready这一层也能执行成功。

    百度上搜为什么第一种不能执行,得到的答案差不多就是因为ready是局部函数。点击事件是在全局里调用,但是我的疑问就是我触发点击事件也是在ready加载完之后执行的,也应该是在ready作用域中啊。希望有想法的朋友可以回复我

    先记录下来,目前的结论是:ready里不能声明函数。


    2015.12.18 13点16分编辑:
    中午趁吃饭时间问了问搞前端的同学,终于明白了其中含义:
    div绑定的onclick = abc() 在页面加载 DOM渲染的时候  就会去绑定abc函数,就要去找abc()的函数声明,但是函数声明是在ready里面的,所以并没有找到,也就是没有给abc绑定上函数,所以就算等页面加载完了再去点击,这时候abc已经定型了,就是没找到这个函数声明。
    解决办法:
    方法一:把ready那一层去掉。
    方法二:HTML里不绑定onclick,在JS里写成$("div").on("click", function(){})

  • 相关阅读:
    嵌入式编程中使用 do{...} while(0) 的解释
    ESP32学习笔记(一) 环境搭建与下载
    预告:准备开个坑,集中学习一下esp32模块
    【信号与系统】多项式化简方法
    nginx二级域名代理
    nginx配置ssl证书
    springBoot使用阿里云的证书
    vue-cli3项目开启less支持并引入短链接
    一键安装系列
    centos7增加swap
  • 原文地址:https://www.cnblogs.com/samtrybest/p/5071188.html
Copyright © 2011-2022 走看看