bind和on的区别

bind方法与on方法都是事件绑定,但是两者却又有着一个大区别:事件委托

jquery文档中bind和on函数绑定事件的用法:

.bind(events [,eventData], handler)

.on(events [,selector]  [,data], handler)

从文档中可以看出,.on方法比.bind方法多一个参数'selector'子类选择器;

事件委托就是子类的事情委托给父类的去做,而这就让我们想起了冒泡事件,是的,这的确是委托事件的原型,而我们的selector,则是判断是不是那个子元素触发的事件,如果不是,自然就忽略掉了;

好处

1.万一子元素非常多,给每个子元素都添加一个事件,会影响到性能;

2.为动态添加的元素也能绑上指定事件;

1比如一个有着1000条新闻的新闻列表,当我们绑定1000次的时候,会耗费很多资源,而一次事件委托就足够了;

2.如:$('ul li').on('click', function(){console.log('click');})的绑定方式和$('ul li').bind('click', function(){console.log('click');})一样;我通过js给ul添加了一个li:$('ul').append('<li>js new li<li>');');这个新加的li是不会被绑上click事件的

但是我用$('ul').on('click', 'li', function(){console.log('click');}方式绑定,然后动态添加li:$('ul').append('<li>js new li<li>');这个新生成的li被绑上了click事件

 

转载于:https://www.cnblogs.com/wangqiao170/p/10790159.html

### Vue.js 中 `v-on` `v-bind` 的区别与使用场景 #### 基本概念对比 `v-on` 是 Vue.js 提供的一个指令,主要用于监听 DOM 事件,并允许开发者执行相应的 JavaScript 方法或表达式来响应用户的输入或其他行为[^2]。 另一方面,`v-bind` 则是一个专门用来动态绑定 HTML 属性到 Vue 实例上的数据属性的指令。它可以实现动态设置元素的属性值,比如 `href`, `class`, 或者其他任何合法的 HTML 属性[^1]。 --- #### 使用方法举例 ##### **`v-on`** 以下是 `v-on` 的基本用法示例: ```html <button v-on:click="handleClick">点击我</button> <script> export default { methods: { handleClick() { alert('按钮被点击了!'); } } } </script> ``` 在这个例子中,当用户点击按钮时会触发 `handleClick` 方法,弹出提示框。这展示了如何利用 `v-on` 来捕获处理用户交互事件。 ##### **`v-bind`** 下面是 `v-bind` 的典型应用场景之一——动态链接地址的例子: ```html <a v-bind:href="dynamicUrl">访问网站</a> <script> export default { data() { return { dynamicUrl: 'https://example.com' }; } }; </script> ``` 这里通过将 `data()` 函数返回的对象中的 `dynamicUrl` 绑定到了 `<a>` 标签的 `href` 属性上,从而实现了 URL 动态化的效果。 --- #### 主要差异总结 | 特性 | `v-on` | `v-bind` | |---------------------|-------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------| | **主要功能** | 监听 DOM 事件并调用相应逻辑 | 动态绑定 HTML 元素的属性 | | **适用范围** | 用户操作(如 click, keypress 等),以及更广泛的事件类型 | 所有可配置的 HTML 属性 | | **语法结构** | `v-on:eventName="handler"` | `v-bind:attributeName="valueExpression"` | 需要注意的是,在实际项目开发过程中,这两个指令经常一起配合工作以完成更加复杂的功能需求。例如下面这个综合案例就同时运用了两者的能力: ```html <template> <div> <!-- 结合 v-bind 设置 class --> <button :class="{ active: isActive }" @click="toggleActive"> {{ buttonLabel }} </button> <!-- 结合 v-on 处理鼠标悬停效果 --> <p @mouseover="showTooltip=true" @mouseout="showTooltip=false">{{ tooltipText }}</p> </div> </template> <script> export default { data() { return { isActive: false, showTooltip: false, tooltipText: '这是工具提示文字', buttonLabel: '切换状态' }; }, methods: { toggleActive() { this.isActive = !this.isActive; } } }; </script> ``` 上述代码片段不仅演示了如何借助 `v-bind:class` 控制样式类名的变化,还体现了怎样依靠 `v-on` 对不同的鼠标的动作作出反应。 --- #### 性能考虑及其他注意事项 虽然二者用途不同,但在某些特定情况下可能会存在重叠区域或者相似之处。然而对于性能敏感型的应用程序来说,则需特别留意像 `v-memo` 这样的高级特性可能带来的潜在优势[^3]。不过通常而言,合理选用合适的 API 就已经能够满足绝大多数日常编码的需求了。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值