每次调用Jquery回调函数都会返回一次

时间:2014-03-15 09:11:53

标签: javascript jquery jquery-callback

当用户点击“自定义”链接时,我调用一个函数来打开一个对话框。当用户单击“保存”按钮时,该函数具有回调函数。这个回调返回一个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?

1 个答案:

答案 0 :(得分: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 - 方法分离其他点击事件,我认为使用这种方法是一种很好的做法。

相关问题