在jQuery中单击事件调用两次或更多次

时间:2015-01-08 03:32:07

标签: javascript jquery

我是Javascript的新手,并制作了这样的函数结构:

var project = ... ; // it's dynamic

// first function
$('body').on('click', '.projectmonitoring', function () {
    SetMonitoring(project);
});

// second function
function SetMonitoring(project) {
    var tasks = ... ; // this variable produced inside Ajax

    // third function
    $('#save').click(function () {
        // do something using project and tasks variable
    });
}

每当我调用第一个函数时,当然会触发SetMonitoring函数。我打了第一个函数多次(点击两次或更多次)。当我调用第三个函数时,会发生的是第三个函数的执行次数与我调用的第一个函数的数量相同。

也许我的结构错了。我希望已经得到了很好的解释。提前谢谢。

3 个答案:

答案 0 :(得分:0)

创建一个全局变量,在第二个函数中设置它,然后在第三个函数中使用它。

var value_of_project;

// first function
$('body').on('click', '.projectmonitoring', function () {
    SetMonitoring(project);
});

// second function
function SetMonitoring(project) {
    //set value of project here
    value_of_project = "some value";
}

// third function
$('#save').click(function () {
    //do something using value_of_project 
});

答案 1 :(得分:0)

好吧,你可以用:      $(' #save')。off('点击')。点击(function(){... 但更好的解决方案是重新构建代码。如果它是全局的,你不需要将项目参数传递给setmonitoring函数......但是无论如何在ivent处理程序中附加一个事件处理程序是一种反模式......

答案 2 :(得分:0)

确保您的功能仅被调用一次 -

使用one -

var project = ... ; // it's dynamic

// first function
$('body').one('click', '.projectmonitoring', function () {
    SetMonitoring(project);
});

// second function
function SetMonitoring(project) {
    var tasks = ... ; // this variable produced inside Ajax

    // third function
    $('#save').click(function () {
        // do something using project and tasks variable
    });
}