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

Javascript 在jQuery中单击事件调用两次或多次,javascript,jquery,Javascript,Jquery,我是Javascript新手,创建了如下函数结构: var project = ... ; // it's dynamic // first function $('body').on('click', '.projectmonitoring', function () { SetMonitoring(project); }); // second function function SetMonitoring(project) { var tasks = ... ; //

我是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函数。我多次调用了第一个函数(单击两次或多次)。当我调用第三个函数时,第三个函数的执行量与我调用第一个函数的量差不多

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 
});

也许我在结构上错了。我希望已经解释清楚了。提前感谢。

制作一个全局变量,在第二个函数中设置,然后在第三个函数中使用

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 
});
那么,你可以使用: $('#save')。关闭('click')。单击(函数(){。。。
但是更好的解决方案是约束代码。如果它是全局的,则不需要将项目PAR传递给SET监视函数…但无论如何,在IVENT处理程序中附加事件处理程序是一种反模式…

< P>以确保您的函数只被调用一次-< /P> 使用
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
    });
}

不要在其他事件处理程序的上下文中附加事件处理程序。这就是在事件处理程序中绑定事件处理程序时发生的情况,每次单击、乘法等时都会添加一个新的处理程序。我该怎么办?我必须发送变量,全局变量似乎根本不起作用。有没有更好的结构想法?用户为什么要单击两次来执行此操作g一个操作?我有两个或更多的链接,每个链接都会在另一个页面上生成动态内容。我要这样做,我会确保每个对象都已加载,因为我使用的是Ajax。然后等待Ajax完成,请参阅: