javascript - 点击事件回调

标签 javascript jquery callback

我在点击事件中调用回调时遇到了一些问题。首先,我在每个 tr 上注册点击事件。

jQuery(tr).click(function (event) {
    var that = this;
    A(event, that, function () {
        var $gantt_container = $('#gantt_container'),
            gantt = ($gantt_container.data("GanttControl") || 
                      $gantt_container.data("radiantqGanttControl"));
        gantt.UpdateDatasource();
        return;
    });
});

在对 A 的方法调用中,我将函数作为参数传递。

var A = function (event, that, B) {
    var activity = event.currentTarget['data-grid-item'].Activity;
    if (event.target.type !== 'checkbox') {
        jQuery(':checkbox', that).trigger('click');
    }
    if (jQuery(':checkbox', that)[0].checked == false) {
        jQuery(this).removeClass('ui-selected ui-state-active');
        activity.DataSource['checkbox'] = '<input class="tandtCheckbox" entityType = "' + activity.DataSource.type + '"  status="' + activity.DataSource.status + '" name="' + activity.DataSource.name + '" projectId="' + activity.DataSource.projectId + '" type="checkbox" id="' + activity.DataSource.taskId + '" mileStone="' + activity.DataSource.mileStone + '" >';
    } else {
        activity.DataSource['checkbox'] = '<input checked class="tandtCheckbox" entityType = "' + activity.DataSource.type + '"  status="' + activity.DataSource.status + '" name="' + activity.DataSource.name + '" projectId="' + activity.DataSource.projectId + '" type="checkbox" id="' + activity.DataSource.taskId + '" mileStone="' + activity.DataSource.mileStone + '" >';
    }
    B();
    return;
};

我想执行传递的函数使其表现得像回调,方法 A 不应该等待函数 B 返回。

但是,这并不像我预期的那样。方法调用 A 正在等待 B 返回。

我是 JavaScript 的新手/callback 需要你的专家建议如何将函数 B 调用作为回调。

最佳答案

您的术语有点不对,回调是应该在其他逻辑完成后运行 - 这就是这里发生的事情。你想要的是异步逻辑。

您可以分离您的逻辑:

A(event, that);
B();

function B() {
    var $gantt_container = $('#gantt_container'),
        gantt = ($gantt_container.data("GanttControl") || 
                  $gantt_container.data("radiantqGanttControl"));
    gantt.UpdateDatasource();
    return;
});

var A = function (event, that) {
    // your code...
}

或者您可以使用 setTimeout 来强制并行,尽管这有点“hacky”:

var A = function (event, that, B) {
    // your code...
    setTimeout(B, 0);
    return;
};

关于javascript - 点击事件回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23558463/

相关文章:

javascript - 使用 web-worker 卡住对象

javascript - 我如何从 promise 主体外部访问 promise 结果

javascript - 如何仅显示我的 slider 主页?

javascript - 如何转义字符串以确保它是 JS 源中的有效字符串文字?

ctypes回调函数抛出SIGSEGV

javascript - jQuery.is() :first showing different behavior from :last

c# - 如何在 ASPX 中仅使用原始页面请求自动完成?

javascript - 折叠/展开表列(不是行)

javascript - 回调问题

javascript - Highcharts - 无法运行示例