我在点击事件中调用回调时遇到了一些问题。首先,我在每个 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/