【发布时间】:2016-09-25 06:31:31
【问题描述】:
我用console.log(openDialog()) 和openDialog() 调用一个函数,创建一个模态窗口,该函数只在某些事件上返回。
我的openDialog() 是这样的
function openDialog() {
// do some html
//
buttonElement.onclick = function () {
return 'some value';
}
}
问题是当我调用console.log(openDialog())时,它会自动发现我的函数没有返回值,所以它只返回undefined。我希望它等到我的函数 openDialog() 返回一些东西。
也许是承诺?
编辑
有回调就这样吗?
function openDialog(cb) {
// do some html
buttonElement.onclick = function () {
return cb('some value');
}
}
console.log(openDialog(function (value) {
return value;
});
【问题讨论】:
-
你这样做的方式是让你的控制台语句在事件的回调中(
onClick)。我假设您想在您的console.log上打印'some value'? -
函数是同步的,你不能对它们使用
promise。为什么需要openDialog()才能返回值? -
除了
openDialog()将立即返回的主要问题之外,浏览器使用点击处理程序的返回值来决定是否取消点击的默认行为,因此该部分不会也没有意义。 -
我正在尝试制作一个自定义的
prompt(),所以我想显示对话框并获取用户在对话框中写入的内容,这也是事件仅在函数内部有效的原因。 -
您需要重构代码以使用回调。也就是说,让
openDialog()接受一个回调函数作为参数,然后在您的点击处理程序中调用该回调函数来执行您想做的任何事情。
标签: javascript function events dom-events