zoukankan      html  css  js  c++  java
  • jQuery live与bind的区别

    平时在使用jQuery进行AJAX操作的时候,新生成的元素事件会失效,有时候不得不重新绑定一下事件,但是这样做很麻烦。例如评论分页后对评论内容的JS验证会失效等。在jQuery1.3之前有一个插件会解决这个问题http://plugins.jquery.com/project/livequery ,jQuery1.3增加了一个live()方法,下面是手册上的说明:

    jQuery 1.3中新增的方法。给所有当前以及将来会匹配的元素绑定一个事件处理函数(比如click事件)。也能绑定自定义事件。

    目前支持 click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup。

    还不支持 blur, focus, mouseenter, mouseleave, change, submit

    与bind()不同的是,live()一次只能绑定一个事件。

    这个方法跟传统的bind很像,区别在于用live来绑定事件会给所有当前以及将来在页面上的元素绑定事件(使用委派的方式)。比如说,如果你给页面上所有的li用live绑定了click事件。那么当在以后增加一个li到这个页面时,对于这个新增加的li,其click事件依然可用。而无需重新给这种新增加的元素绑定事件。

    .live()与流行的liveQuery插件很像,但有以下几个主要区别:

    • .live 目前只支持所有事件的子集,支持列表参考上面的说明。
    • .live 不支持liveQuery提供的“无事件”样式的回调函数。.live只能绑定事件处理函数。
    • .live 没有”setup”和”cleanup”的过程。因为所有的事件是委派而不是直接绑定在元素上的。

    要移除用live绑定的事件,请用die方法

    用法示例:

    <div class=”myDiv”></div>

    jquery:

    $(“.myDiv”).live(“click”, function(){

    alert(“clicked!”);

    });

    如果使用javascript动态创建一个class为mydiv的元素,点击元素依然会有弹出。为什么使用live后就有了呢?这是因为jquery利用了事件的冒泡机制,直接把事件绑定在了document上,然后通过event.target找出事件的来源。这跟jquery.livequery插件不一样,jquery.livequery每20毫秒做一次检查,如有新生成则重新绑定一次事件。

    使用live当然有利也有弊:
    好处就是:元素更新时不用反复去定义事件。
    坏处就是:把事件绑定在document上会在页面上每一个元素都呼叫一次,如使用不当会严重影响性能。而且不支持blur, focus, mouseenter, mouseleave, change, submit。

  • 相关阅读:
    Python 安装Twisted 提示python version 2.7 required,which was not found in the registry
    Openfire Strophe开发中文乱码问题
    css div 垂直居中
    How to create custom methods for use in spring security expression language annotations
    How to check “hasRole” in Java Code with Spring Security?
    Android 显示/隐藏 应用图标
    Android 当媒体变更后,通知其他应用重新扫描
    文件上传那些事儿
    专题:点滴Javascript
    主流动画实现方式总结
  • 原文地址:https://www.cnblogs.com/icycore/p/3159526.html
Copyright © 2011-2022 走看看