使用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 +

我试图使用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 + 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更好