读书人

这个诡异的Jquery多次事件绑定如何解决

发布时间: 2012-11-15 15:16:15 作者: rapoo

这个诡异的Jquery多次事件绑定怎么解决?
list下的超链接a是通过AJAX 加载的,
add_save 按钮是固有不变。
现在的情况是,每次执行list()方法是,始终会对add_save 按钮绑定click事件。
if($(this).data("events") == undefined)没有起到作用。
造成的后果是,点击add_save一次 会执行N次该按钮对应的方法。



HTML code
<div id="list"><a href="#" id="edit_1">aaa</a><a href="#" id="edit_2">bbb</a></div><input type="button" id="add_save" value="保存" />

JScript code
function user(){    this.username = null;    this.password = null;    this.id=0;    this.container = null;    this.afterFun = null;    this.eventTarget = null;    this.result = [false,false,false];}user.prototype.list = function(){    var o = this;    var container = $(o.container);    container.html("<td colspan='3' align='center'><img src='../Codebase/Images/Icon/loading.gif' align='absmiddle' />数据加载中...</td>");    $.ajax({       type: "POST",       url: "/ASHX/userList.asp",       success: function(msg){         container.html(msg);         if (o.afterFun){            o.afterFun.call(this,o);         }       }    }); }user.prototype.eventBindHandler = function(){    var o = this;    $(o.eventTarget).each(function(i){        if($(this).data("events") == undefined){            $(this).bind("click",{ids:$(this).attr("id"),user:o},function(event){              var user = event.data.user;              var arr = event.data.ids.split("_");              switch(arr[0].toLowerCase()){                case"add":                    if(user.check()){                        user.id = 0;                        user.update();                    }else{                        $("#Err").html("<img src='../Codebase/Images/Icon/Errors.gif' align='absmiddle' />用户名或密码设置有误,请检查!");                        setTimeout(function(){$("#Err").html('')},3000);                    }                break;                                case"edit":                    //启动编辑器                break;                                case"delete":                    if(confirm('确实要删除选中用户吗?')){                        user.id = parseInt(arr[1]);user.delete();                    }                break;                }            event.stopPropagation();          });        }    });}/*************** 前台调用如下******************/var admin = null;$(function(){    admin = new user();    admin.container = "#list a,#add_save";    admin.afterFun = function(){        var parentWin = new win();        parentWin.container = "#win";        parentWin.resetSize();        admin.eventTarget = "#list a,#add_save";        admin.eventBindHandler();    }    admin.list();    });





[解决办法]
list()

外面设置一个全局变量,var count=0;

进入list就 count就加1

判断,count的值,如果=1,就执行你的绑定方法,如果大于1,就不执行。

以后再找机会 初始化count

[解决办法]
看得头晕
使用live()方式对#list a进行事件绑定
按钮就直接:
JScript code
$('#add_save').click(function(){  //事务处理}) 

读书人网 >JavaScript

热点推荐