使用JavaScript/jQuery来;暂停“;执行并等待用户输入
我试图使用JavaScript和jQuery覆盖标准功能,即使用JavaScript/jQuery来;暂停“;执行并等待用户输入,javascript,jquery,Javascript,Jquery,我试图使用JavaScript和jQuery覆盖标准功能,即警报和确认 为此,我构建了一个对话框,当代码要求发出警报或确认时,它会显示一个对话框,如下所示: 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 +
警报
和确认
为此,我构建了一个对话框,当代码要求发出警报或确认时,它会显示一个对话框,如下所示:
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>'
};
函数抛出器(e_内容){
var e_title=“错误”;
var e=误差div;
var return\u error=e.start+e.header\u start+e\u title+e.header\u end+e.body\u start+e\u content+e.body\u end+e.end;
jQuery(“body”).append(返回错误);
返回;
}
函数throwConfirm(e_内容){
函数confirmCallback(){
var retval=“213”;
jQuery(“body”)。在(“click”上,函数(e){
如果(e.target.id==“确认好”){
hideError();
retval=true;
}
否则如果(e.target.id==“确认\取消”){
hideError();
retval=false;
}
})
retval==“213”?confirmCallback():retval;
返回返回;
}
var e_title=“确认操作”;
var e=确认div;
var return\u error=e.start+e.header\u start+e\u title+e.header\u end+e.body\u start+e\u content+e.body\u end+e.end;
jQuery(“body”).append(返回错误);
返回confirmCallback();
}
函数hideError(){
jQuery(document).find(“.custom_error_div”).remove();
返回;
}
var errordiv={
开始:“”,
结束:“”,
标题\u开始:“”,
标题\结尾:“”,
正文\u开始:“”,
正文\u结尾:“”
+“好的”
+ ''
};
var confirmdiv={
开始:“”,
结束:“”,
标题\u开始:“”,
标题\结尾:“”,
正文\u开始:“”,
正文\u结尾:“”
+“好的,取消”
+ ''
};
这项功能的基础是有效的,它会在我需要时发出警报并进行确认-但确认是一个问题,当单击“是”或“否”时,throwconfim
函数应该返回true或false,而这似乎不会发生,相反,我达到了最大呼叫大小
这样做的基础是复杂而复杂的,与手头的问题无关——我需要知道的是:如何让
throwConfirm
函数根据用户单击的按钮返回true或false?这显示了一种方法。这有点麻烦-有更好的方法来设置回调,而不是使用全局\u callback
变量
“严格使用”;
功能投掷者(e_内容){
var e_title=“错误”;
var e=误差div;
var return\u error=e.start+e.header\u start+e\u title+e.header\u end+e.body\u start+e\u content+e.body\u end+e.end;
jQuery(“body”).append(返回错误);
返回;
}
函数throwConfirm(e_内容,回调){
hideError();
var e_title=“确认操作”;
var e=确认div;
var return\u error=e.start+e.header\u start+e\u title+e.header\u end+e.body\u start+e\u content+e.body\u end+e.end;
jQuery(“body”).append(返回错误);
//这是一次恶作剧,但我累了
_回调=回调
}
函数hideError(){
jQuery(document).find(“.custom_error_div”).remove();
返回;
}
var errordiv={
开始:“”,
结束:“”,
标题\u开始:“”,
标题\结尾:“”,
正文\u开始:“”,
正文\u结尾:“”
+“好的”
+ ''
};
var confirmdiv={
开始:“”,
结束:“”,
标题\u开始:“”,
标题\结尾:“”,
正文\u开始:“”,
正文\u结尾:“”
+“好的,取消”
+ ''
};
var_回调;
函数init(){
jQuery(“body”)。在(“click”上,函数(e){
如果(e.target.id==“确认好”){
hideError();
_回调(true);
}
否则如果(e.target.id==“确认\取消”){
hideError();
_回调(假);
}
})
$(document).on(“click”、“#foo”,function(){throwConfirm(“bar”,doSomethingWithMyRetval)});
}
函数doSomethingWithMyRetval(foo){
//福福福
log(“从确认返回的值是:“+foo”);
}
$(文件).ready(初始化)代码>
您收到了什么错误消息?你能把它做成一个工作片段来显示问题吗?你需要将回调函数传递到throwConfirm
,并在confirmCallback
中执行,传递“return”值。你得到的最大调用大小是因为:“213”?confirmCallback():retval代码>。onclick函数没有被调用,只是被创建了——因此retval将始终是“213”,因此您将永远递归。与其尝试返回值,不如设置一个全局函数或调用一个回调函数。你能多发一点html吗,太拉兹特了,不能发明e.start+e.header\u start+e\u title+e.header\u end+e.body\u start+e\u content+e.body\u end+e.end
@SoorajChandran,一份工作副本是很棘手的——显然还有更多的东西是小提琴无法处理的。。。如问题中所述:最大调用堆栈大小是我的error@SoorajChandran它是循环的,因为在他测试retval之前没有调用click处理程序,所以它从未更改。非常有趣。。。我将玩一玩这个,看看它是否能满足我页面上的需要,谢谢!:)@桑斯威夫特웃 jQuery只是在调用()上的时添加了新的处理程序,这就是以前版本多次记录日志的原因。这个版本修复了这个问题,但是我相信有一个版本的on()
创建了1个use回调处理程序,只是不记得语法。这样做可能比使用_callbackkludge更好