结构:

1、动态绑定就是给还未出现的元素绑定事件,不用每次都去执行绑定事件。
2、Jquery 1.7 之前使用 .live() 来实现动态绑定, 1.7 之后使用 .on() 来实现。
3、使用中容易出错的地方:
理解错误,总以为基于 .js_sort_up 去触发绑定。这是对动态绑定原理的不理解。以下是错误代码:
$(".js_sort_up").each(function(index, element) {
$('.js_sort_up').on('click',function(){
console.log('11');
var selfDom = $(this).parents("div.js_rule_box");
var prevDom = selfDom.prev('div.js_rule_box');
if(prevDom.length < 1){
layer.msg('已经到顶了');
}
var prevClone = prevDom.clone();
selfDom.after(prevClone);
}
);先理解 .on() 的原理:给动态创建的元素添加绑定事件,其实就是利于了冒泡的原理,利用DOM树中,存在的被创建元素的父亲元素或整个DOM树来,通过适配的方式,来查找创建元素并绑定事件。
通俗一些:其实是基于父原始来给下面子元素动态绑定,新增的元素也要是这个父元素里面的子元素。这样才能成功。在此次处理过程中父元素不能是新增的,切记。
正确JS:基于父元素 document (上帝视角)出发,对他的子元素 .js_sort_up(子民)进行监听。待有新子元素出生,通过Dom树原理(冒泡)反馈到 doucment (上帝) ,然后检查这个子元素是否有 .js_sort_up 来判断是否给你也这个事件。
$(function(){
//新增规则
$(".js_add_rule").each(function(index, element) {
$(this).click(function(){
var clone = $(this).parent("div").prev('div').clone();
$(this).parent("div").before(clone);
});
});
//动态给 .js_sort_up 增加上移事件
$(document).on('click', '.js_sort_up', function(){
var selfDom = $(this).parents("div.js_rule_box");
var prevDom = selfDom.prev('div.js_rule_box');
if(prevDom.length < 1){
layer.msg('已经到顶了');
}
var prevClone = prevDom.clone();
selfDom.after(prevClone);
prevDom.remove();
});
});