Jquery有live函数,那,如何用原生的Js绑定还未出现的元素的事件呢?

JavaScript013

Jquery有live函数,那,如何用原生的Js绑定还未出现的元素的事件呢?,第1张

.live()背后神奇的地方就在于它并不将事件绑定到你选定的elements上,而实际上是绑定到了DOM树的跟节点,而是在element中就像一个参数一样进行传递。

那么当你点击一个元素时,事件就会在DOM树上往上传递,直至到达根节点。这个事件的触发器已经在根节点被.live()创建。这个触发方法将首先检测被点击的目标看是否和.live()调用的选择器相匹配。如果匹配,那么绑定的方法就会执行了。

因为不管你在根节点内点击了什么,根节点的事件都会被触发,当你点击加入到根节点的任何元素时这个检查都会发生。

比如你要给一个还没有添加在页面中的id为“ABC”元素添加click事件。

实际上你要给document元素添加click事件。

并且在document的click回调函数中,判断事件源event.target。然后判断它的ID是“ABC”则执行相应的事件函数。类似这样。

js/jquery 禁用点击事件

工作中遇到这种情况:验证邮箱页面的重新发送需要在3分钟后才可以点击重新发送,所以在这之前需要禁用他的点击

网上查了后有一下几种实现方法

1.css禁用鼠标点击事件

.disabled { pointer-events: none}

注:(这个没有试过)

jquery禁用a标签方法1

01$(document).ready(function () {

02$("a").each(function () {

03var textValue = $(this).html()

04if (textValue == "XX概况" || textValue == "服务导航") {

05$(this).css("cursor", "default")

06$(this).attr('href', '#')//修改<a>的 href属性值为 # 这样状态栏不会显示链接地址

07$(this).click(function (event) {

08event.preventDefault() // 如果<a>定义了 target="_blank“ 需要这句来阻止打开新页面

09})

10}

11})

12})

jquery禁用a标签方法2

1$('a.tooltip').live('click', function(event) {

2 alert("抱歉,已停用!")

3 event.preventDefault()

4})

jquery禁用a标签方法3

1$(function(){

2$('.disableCss').removeAttr('href')//去掉a标签中的href属性

3$('.disableCss').removeAttr('onclick')//去掉a标签中的onclick事件

4})

jquery控制按钮的禁用与启用

控制按钮为禁用:

1$('#button').attr('disabled',"true")添加disabled属性

2$('#button').removeAttr("disabled")移除disabled属性

live() 方法为被选元素附加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。

通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)。

问题:使用jQuery的live()方法绑定事件,有时会出现重复绑定的情况,如,当点击一个按钮时,此按钮所绑定的事件会并执行n遍。

解决:使用die()方法,在live()方法绑定前,将此元素上的前面被绑定的事件统统解除,然后再通过live()方法绑定新的事件。

Js代码

//先通过die()方法解除,再通过live()绑定

$("#selectAll").die().live("click",function(){

//事件运行代码

})

//先通过die()方法解除,再通过live()绑定

$("#selectAll").die().live("click",function(){

//事件运行代码

})die()方法简介:

1、延时绑定事件功能不同:

jquery $('#btn').click在文档流中,后续通过脚本动态添加的元素(符合 id="#btn"),是没有绑定click事件的。

$("#btn").live("click",function()后续通过脚本动态添加的元素(符合 id="#btn"),也是绑定了click事件的。如何使用 live() 方法向尚未创建的元素添加事件处理器。

live()可以将事件绑定到当前和将来的元素(eg:为id=zy元素绑定点击事件,而当用js动态生成一个节点并插入到dom文档结构中时,如果是用bind()绑定的,怎么新插入的节点将不会有该bind绑定事件。而live()则可以)

2、绑定方式不同:

.live()则是通过冒泡的方式来绑定到元素上的。更适合列表类型的,绑定到DOM节点上。而click()是直接绑定在元素上。

3、底层API支持不同:

click()方法:在jqeury事件处理API中,bind()是其API基础。click(),mouseover(),mousermove等来处理事件,真正起作用的是bind()。而这些方法都只是辅助作用(别名函数),简化使用。都只有一个参数(触发事件时执行的回调函数)。live()不同,不依赖bind()API。

参考资料来源:jQuery-.click()

参考资料来源:jQuery-.live()