使用JavaScript / jQuery "执行并等待用户输入
Using JavaScript / jQuery to "pause" execution and wait for user input
我正在尝试使用JavaScript &jQuery覆盖标准功能-即alert
和confirm
。
为此,我构建了一些东西,当代码请求警报或确认时显示一个对话框,这看起来像:
function throwError(e_content) {
var e_title = "Error";
var e = errordiv;
var return_error = e.start + e.header_start + e_title + e.header_end + e.body_start + e_content + e.body_end + e.end;
jQuery("body").append(return_error);
return;
}
function throwConfirm(e_content) {
function confirmCallback() {
var retval = "213";
jQuery("body").on("click", function (e) {
if (e.target.id == "confirm_okay") {
hideError();
retval = true;
}
else if (e.target.id == "confirm_cancel") {
hideError();
retval = false;
}
})
retval == "213" ? confirmCallback() : retval;
return retval;
}
var e_title = "Confirm Action";
var e = confirmdiv;
var return_error = e.start + e.header_start + e_title + e.header_end + e.body_start + e_content + e.body_end + e.end;
jQuery("body").append(return_error);
return confirmCallback();
}
function hideError () {
jQuery(document).find(".custom_error_div").remove();
return;
}
var errordiv = {
start: '<div class="custom_error_div"><div class="custom_error_div_content" >',
end: '</div></div>',
header_start: '<div class="custom_error_div_header">',
header_end: '</div>',
body_start: '<div class="custom_error_div_body">',
body_end: '<div class="bottom-buttons">'
+ '<button id="alert_okay">Ok</button>'
+ '</div>'
};
var confirmdiv = {
start: '<div class="custom_error_div"><div class="custom_error_div_content" >',
end: '</div></div>',
header_start: '<div class="custom_error_div_header">',
header_end: '</div>',
body_start: '<div class="custom_error_div_body">',
body_end: '<div class="bottom-buttons">'
+ '<button id="confirm_okay">Ok</button><button id="confirm_cancel">Cancel</button>'
+ '</div>'
};
这是工作的基础,当我想要它时,它会发出警报并确认-但确认是一个问题,当单击"是"或"否"时,throwConfirm
函数应该返回真或假,这似乎没有发生,相反,我达到最大调用大小。
这样做的基础是复杂和令人费解的,与手头的问题无关——我需要知道的是:
我如何让throwConfirm
函数根据用户单击的按钮返回true或false ?
这显示了一种方法。这有点笨拙——会有更好的方法来设置回调而不是使用全局_callback
变量
"use strict";
function throwError(e_content) {
var e_title = "Error";
var e = errordiv;
var return_error = e.start + e.header_start + e_title + e.header_end + e.body_start + e_content + e.body_end + e.end;
jQuery("body").append(return_error);
return;
}
function throwConfirm(e_content, callback) {
hideError();
var e_title = "Confirm Action";
var e = confirmdiv;
var return_error = e.start + e.header_start + e_title + e.header_end + e.body_start + e_content + e.body_end + e.end;
jQuery("body").append(return_error);
// this is a hack, but I'm tired
_callback = callback
}
function hideError () {
jQuery(document).find(".custom_error_div").remove();
return;
}
var errordiv = {
start: '<div class="custom_error_div"><div class="custom_error_div_content" >',
end: '</div></div>',
header_start: '<div class="custom_error_div_header">',
header_end: '</div>',
body_start: '<div class="custom_error_div_body">',
body_end: '<div class="bottom-buttons">'
+ '<button id="alert_okay">Ok</button>'
+ '</div>'
};
var confirmdiv = {
start: '<div class="custom_error_div"><div class="custom_error_div_content" >',
end: '</div></div>',
header_start: '<div class="custom_error_div_header">',
header_end: '</div>',
body_start: '<div class="custom_error_div_body">',
body_end: '<div class="bottom-buttons">'
+ '<button id="confirm_okay">Ok</button><button id="confirm_cancel">Cancel</button>'
+ '</div>'
};
var _callback;
function init() {
jQuery("body").on("click", function (e) {
if (e.target.id == "confirm_okay") {
hideError();
_callback( true );
}
else if (e.target.id == "confirm_cancel") {
hideError();
_callback( false );
}
})
$(document).on("click", "#foo", function() { throwConfirm("bar", doSomethingWithMyRetval) } );
}
function doSomethingWithMyRetval(foo) {
// foo foo foo
console.log("The retval from the confirm was: "+foo);
}
$(document).ready(init);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<body>
<input id="foo" type="button">
</body>
相关文章:
- 等待回调函数执行
- 如何在seleniumwebdriver中执行javascript提示并等待接受输入
- Node.js-等待process.exit()在前面的代码完成后执行
- Javascript等待ajax成功后再执行代码
- 等待函数执行后再继续
- 必须等待执行 jQuery,直到加载服务
- 流星技术/模式,用于等待数据库变量更改,然后在 in 之后执行某些操作
- JavaScript setTimeout() 不会等待执行
- Ajax等待重定向以完成执行
- 动画在执行之前等待
- 等待JQuery执行,直到加载了整个页面,中断执行
- 使用jQuery并行执行多个promise后等待完成
- 如何等待ajax成功处理程序完成后再执行另一个
- jQuery-等待此元素,然后执行1次
- 等待promise解析后再执行代码
- 如何在函数执行前等待一秒钟
- 并行执行功能并等待其完成
- 如何在执行之前使 JavaScript 中的内联表达式等待
- 等待 AJAX,然后再继续执行单独的函数
- 我如何执行等待操作作为while条件或等效条件