首页 > 其他分享 >你真的了解html中的事件绑定吗

你真的了解html中的事件绑定吗

时间:2025-01-09 17:15:12浏览次数:1  
标签:function 函数 绑定 括号 点击 html 事件 btn

前言:事件的绑定方式主要有两大类:在html中直接绑定在js中绑定,细分的话可以有三种(js有两种)。

函数名或者函数表达式后面紧跟 () ,则会自动调用。

1.内联模式:将函数名直接作为html标签中的属性的属性值-----------这种的缺点是:不符合行为分离的基本规范

这种方式叫做内联绑定事件,HTML的元素中如有 'onclick' 这样的 'onxxx' 属性,它可以给这个DOM元素绑定一个类型的事件,它也有两种形式。

(1):就是用函数名表示。

<button id="myButton" onclick="func()">点击</button>
<body>
    <script type="text/javascript">
        function func() {
            alert('我被点击了1')
        }
    </script>
</body>

注意:这种方式不加括号点击是不执行的,这是由于::::在标签内的事件属性的值是由引号包裹的,代表的是当点击该元素时,执行引号内的代码,直接把引号内的代码拿出来跑,如果你不加括号,那就不会调用那个函数。::::

(2):字符串里面是一段函数表达式。 

<button onclick="alert('我被点击了')">点击</button>

2.脚本模式:获取节点并给节点添加属性

<button class="mybutton">点击</button>
<body>
    <script type="text/javascript">
      let btn = document.querySelector('.mybutton')
        btn.onclick = function dd1 () {             console.log('我被点击了1')         }      btn.onclick = function dd2 () {             console.log('我被点击了2')         }         btn.onmouseenter = function () {             console.log('我被进入了')         }         btn.onmouseleave = function cc () {             console.log('我被离开了')         }
</script>
</body>

上面的函数加不加名字都可以

这种方式虽然实现了分离,但只能给btn添加一个函数,再次使用同样的事件就会被覆盖,上面的只会输出第二次点击事件,第一次的被覆盖。

但是不是说上面的mouseenter就会覆盖onclick事件,事件名不同是不会相互干扰的

3.dom2级事件:使用addeventListenter

btn.addEventListener('click', function () {
    console.log('我被点击了1')
})
btn.addEventListener('click', function () {
    console.log('我被点击了2')
})

上面点击按钮,两个事件都会执行,点一次,输出两句。并且执行顺序按照绑定的顺序执行,并且有相应的移除方法,因此首推荐这种!!!!!

延伸1:加括号

let btn = document.querySelector('.mybutton')
btn.addEventListener('click', fun1())
function fun1 () { alert('我被点击了'); }

函数名后边加上括号表示立即执行该函数,如果函数内存在返回值则得到该值。上面的例子加上括号,就会执行函数,也就是你还没点击函数就会执行一次,后面点击了不会有任何效果。这一点与内联模式看着貌似效果相反,其实不是,

那是因为:标签的事件属性里引号之间会被当做js语句直接执行,加了括号才能保证调用并执行函数。但是由于是用元素标签这种方式绑定的事件,执行的时机就被控制在了点击该标签时触发。

延伸2:不加括号

btn.addEventListener('click', fun1)

这种情况是只把函数名传给事件,相当于将函数指针传递给元素事件,这样的好处就是可以在需要的时候找到函数并执行。

打个小比喻来说,你和你的朋友会面,加了小括号时你的朋友就立即出现在你面前,他才不管你当时是不是在忙,有种不请自来的不快感;而不加括号相当于你的朋友告诉了你他家在哪,当你需要他的时候就来找他,这可真是位贴心的朋友啦。所以,大多数事件绑定都仅仅只是传递给事件一个函数指针也就是函数名。

/*简单来说就是带括号的是执行一次函数,不带括号的函数就是一个函数对象*/

拓展1:在vue中加不加括号都可以正确执行的原因

而在vue中使用@click绑定事件加不加括号都行,它会给你处理的加括号的话,参数由你定义,不加括号的话,传入的参数是默认的event事件

拓展2:在DOM2级事件中如何传参

这时又有一个问题,之前说明的都是无参函数,如果有参函数怎么办呢?难道只能用内联那种方法么?当然是否定的,尽量不要使用DOM0方式一那种形式,不符合结构与行为分离的原则。一般这种情况下就是使用匿名函数解决了,例如:

思路就是return一个函数
//第一种
let btn = document.querySelector('.mybutton') btn.addEventListener('click', y('hello1')) function y(d) { return function () { console.log(d) } }
//第二种:采用箭头函数 const z = (d) => { return function () { console.log(d) } } btn.addEventListener('click', z('hello2')) //第三种:使用匿名函数 btn.addEventListener('click', function () { console.log('hello3') })

拓展3:函数有变量提升

拓展4:addeventListener绑定事件名称

在 JavaScript 中,使用 addEventListener 方法时,事件名称使用的是事件的标准名称(如 clickmouseover 等),而不是使用 on 前缀(如 onclickonmouseover),是为了遵循规范和保证代码的一致性和可读性。

 

onclick 是一个事件处理属性,用于指定当元素被点击时要执行的 JavaScript 代码。它是 DOM 元素的一个属性,可以直接在 HTML 中定义。

 

 

标签:function,函数,绑定,括号,点击,html,事件,btn
From: https://www.cnblogs.com/131362wsc/p/18662142

相关文章

  • HTML深入
    注释将帮助其他人(以及未来的你!)理解代码。在HTML中,注释表达为<!--…-->示例:<!--Paragraphelementbelow--> <p>Thisproductisawesome!</p> 可以使用注释暂时禁用部分代码,使其不被浏览器显示。<!--<button>OK</button>--> HTML是一种不区分大小写的语言。这意味着......
  • 如何在nginx上设置html/json不缓存
    一、简介前端项目发布以后,经常会遇到访问不到最新的版本,这主要是由于我们项目的入口文件index.html被浏览器或者代理缓存了,没有实时拉取到最新文件。本文将介绍一下在nginx上如何设置html文件不缓存。二、Cache-Control介绍2.1服务器可以在响应中使用的标准Cache-Control指......
  • Flutter进阶(5):EventBus全局事件总线
    一、EventBus的基本概念FlutterEventBus是一种用于在Flutter应用程序中实现组件间通信的事件总线机制。可以用于在应用程序中实现各个组件之间的通信。它基于发布/订阅模式,允许组件订阅感兴趣的事件,并在事件发生时接收通知。二、FlutterEventBus的工作原理FlutterEventBu......
  • Vue 样式和绑定
    Vue样式和绑定Vue.js是一个渐进式JavaScript框架,广泛应用于构建用户界面和单页应用(SPA)。Vue的特点之一就是它易于上手,并提供了一系列强大且灵活的功能,其中包括样式绑定和动态样式处理。在Vue中,样式和绑定的功能使得开发者能够轻松实现动态样式和类的添加与移除。......
  • html+Css网页设计库洛米首页
      一、......
  • JS将docx转为html代码--Vue3(简易版)
    这两天突然接了一个把节气文章转成html页面的需求,本来只是需要多按几下ctrl+c,ctrl+v能解决的事,但是想想后续一年24个节气,就做个自动转换的工具吧。由于做软件还涉及到其他语言和配置环境,所以还是选择了web。首先创建一个vue3项目,我用的vite搭建的,不会的请自行移步到vite官网。......
  • 【ROS2】Qt事件循环和ROS2订阅机制一起使用有什么注意事项?
    1、简述Qt的事件循环和ROS订阅回调函数都可能在阻塞函数中运行,例如:Qt的QApplication::exec()和ROS的rclcpp::spin()两个阻塞函数不能在同一个线程中使用,如果使用不当,会造成Qt不处理事件或者ROS2不处理订阅的回调函数。2、多线程一般QApplication::exec()运行在主线......
  • HTML+CSS+JS制作中华传统文化主题网站(内附源码,含5个页面)
    一、作品介绍HTML+CSS+JS制作一个中华传统文化主题网站,包含首页、文化艺术页、传统工艺页、文化遗产页、关于我们页等5个静态页面。其中每个页面都包含一个导航栏、一个主要区域和一个底部区域。二、页面结构1.顶部导航区包含网站Logo、主导航菜单(首页、文化分类、活动......
  • HTML+CSS+JS制作中华传统美食主题网站(内附源码,含5个页面)
    一、作品介绍HTML+CSS+JS制作一个中华传统文化主题网站,包含首页、菜系页、食材页、名厨页、美食故事页等5个静态页面。其中每个页面都包含一个导航栏、一个主要区域和一个底部区域。二、页面结构1.顶部横幅导航区包含网站Logo、搜索栏、主导航菜单(首页、菜系分类、美食故......
  • 基于Java+SSM+HTML5智慧养老中心管理系统(源码+LW+调试文档+讲解等)/智慧养老/养老中
    博主介绍......