【问题标题】:Jquery callback function returns once for each time it is calledjquery回调函数每次调用都返回一次
【发布时间】:2014-03-15 09:11:52
【问题描述】:

当用户单击“自定义”链接时,我调用一个函数来打开一个对话框。当用户单击“保存”按钮时,该函数有一个回调。此回调返回一个 obj。 我的问题是,当您单击“自定义”1 次时,您将返回 obj 一次、2 次、返回两次、3 次返回 3... 不断。

我每次用户点击“自定义”后只返回一次的回调是什么。

$(document).ready(function(){

    $('#customize_link').click(function(){
        var child_id = $(this).attr('child-id') * 1,
        this_box = boxJson[child_id]['boxList'][0];

        customize_box(this_box, function(obj){
            boxJson[child_id]['boxList'][0] = obj;
            box_dialog.dialog('close');
       });
    });
}); // end of doc.ready

function customize_box(obj, callback){

    // bunch of code modifying obj...

    $('#save_box_button').click(function(){
        if(typeof callback == "function"){
            return callback(obj);
        }
    });
}

vars (child_id, this_box) 每次点击只会被实例化一次,但 customize_box 的 obj 返回 count(clicks) 2, 3, 4, n... 的次数与点击 box_customize_link 的次数一样多。

我怎样才能为每个box_customize_link 点击只取回一次obj?

【问题讨论】:

    标签: javascript jquery jquery-callback


    【解决方案1】:

    $('#save_box_button') 上的点击处理程序会在您每次调用 customize_box 时附加,即每次点击 $('#customize_link')

    你应该使用 $('#save_box_button').click(function(){ 而不是

    $('#save_box_button').one("click", function() { ...
    

    这样,点击处理程序只会被附加一次。

    第二种选择是在重新附加之前删除可能存在的点击处理程序:

    $('#save_box_button').off("click.savehandler").on("click.savehandler", function() { ...
    

    注意域“savehandler”。它可以防止其他点击事件被off-方法分离,我认为使用这种方法是一种很好的做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 2016-04-13
      • 2022-01-27
      相关资源
      最近更新 更多