Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fancybox的Javascript/Jquery回调是否确认_Javascript_Jquery_Fancybox - Fatal编程技术网

Fancybox的Javascript/Jquery回调是否确认

Fancybox的Javascript/Jquery回调是否确认,javascript,jquery,fancybox,Javascript,Jquery,Fancybox,我正在尝试实现一个奇特的Yes-No确认,但在让回调按需要工作时遇到了问题。下面的示例正在使用 下面代码的问题是,在单击HREF“Test”时调用函数“do_something”,而在用户单击#fancyConfirm_ok时不调用函数 function fancyConfirm(msg,callback) { var ret; jQuery.fancybox({ 'modal' : true, 'content' : "<div style

我正在尝试实现一个奇特的Yes-No确认,但在让回调按需要工作时遇到了问题。下面的示例正在使用

下面代码的问题是,在单击
HREF
“Test”时调用函数“do_something”,而在用户单击
#fancyConfirm_ok
时不调用函数

function fancyConfirm(msg,callback) {
    var ret;
    jQuery.fancybox({
        'modal' : true,
        'content' : "<div style=\"margin:1px;width:240px;\">"+msg+"<div style=\"text-align:right;margin-top:10px;\"><input id=\"fancyconfirm_cancel\" style=\"margin:3px;padding:0px;\" type=\"button\" value=\"Cancel\"><input id=\"fancyConfirm_ok\" style=\"margin:3px;padding:0px;\" type=\"button\" value=\"Ok\"></div></div>",
        'afterShow' : function() {
            jQuery("#fancyconfirm_cancel").click(function() {
                ret = false;
                //jQuery.fancybox.close();
                $.fancybox.close();
            })
            jQuery("#fancyConfirm_ok").click(function() {
                ret = true;
                jQuery.fancybox.close();
            })
        },
        'afterClose' : function() { 
            if (typeof callback == 'function'){ 
                callback.call(this, ret); 
            } else {
                var callback_type = typeof callback;
                alert(callback_type);
            }
        }
    });
}
<a href="#" onclick="fancyConfirm('Are you sure you want to delete?',  do_something('a', 'b') );return false;">Test</a>
函数fancyConfirm(消息,回调){
var-ret;
jQuery.fancybox({
“模态”:正确,
“内容”:“+msg+”,
“afterShow”:函数(){
jQuery(#fancyconfirm_cancel”)。单击(函数(){
ret=假;
//jQuery.fancybox.close();
$.fancybox.close();
})
jQuery(“#FancyConfig_ok”)。单击(函数(){
ret=真;
jQuery.fancybox.close();
})
},
“afterClose”:函数(){
if(typeof callback=='function'){
callback.call(this,ret);
}否则{
var callback_type=回调类型;
警报(回调类型);
}
}
});
}
每当用户单击链接时,您的方法“do_something('a','b')”将被执行,返回的结果将作为第二个参数传递给“FancyConfig”方法。这就是为什么参数“回调”总是“未定义”的原因

fancyBox也有一个问题——“afterClose”回调被调用两次——在打开之前和关闭之后(这将在下一版本中更改)


我会在链接上绑定一个click事件,并在用户单击其中一个按钮时调用回调,比如-

不太喜欢double callback方法()

因此,在试图找到解决方案时,我自己使用了类似的代码,发现只要我的返回值没有在函数的范围内定义,它就可以正常工作,当我的返回值在函数内定义时,我会出现奇怪的行为,它会工作一段时间,然后恢复为未定义

实际上,返回值需要超出函数、全局、闭包等的范围

$(文档).ready(函数(){
$(“.fancybox”)。单击(“click”,函数(e){
e、 预防默认值();
确认(“您想继续吗?”,true,功能(resp){
警报(“您单击了”+响应);
});
});
});
函数确认(消息、模式、回调){
$.fancybox(#确认){
模态:模态,
beforeShow:function(){
$(“.title”).html(msg);
},
afterShow:function(){
$(“.confirm”)。在(“单击”时,函数(事件){
if($(event.target).is(“.yes”)){
ret=真;
}else if($(event.target).is(“.no”)){
ret=假;
}
$.fancybox.close();
});
},
后关闭:函数(){
callback.call(this,ret);
}
});  
}
这里有一个例子

多亏了《谁在现场》为我指明了正确的方向

更新:

现在,我们扩展了我的示例,使用动态构建的按钮和自定义返回值,因此您不仅限于true和false

$(文档).ready(函数(){
$(“.fancybox”)。单击(“click”,函数(e){
e、 预防默认值();
确认(“您想继续吗?”{
/* 
在此处定义按钮,可以处理多个按钮
具有自定义标题和值
*/
按钮:[
{类:“是”,类型:“按钮”,标题:“是”,值:“是”},
{类:“否”,类型:“按钮”,标题:“否”,值:“否”},
{类:“可能”,类型:“按钮”,标题:“可能?”,值:“可能”}
],
莫代尔:对
}, 
功能(resp){
警报(“您单击了”+响应);
}
);
});
});
函数确认(消息、选项、回调){
$.fancybox(#确认){
modal:options.modal,
beforeShow:function(){
this.content.prepend(“

”; $(“.title”).html(msg); 对于(i=0;i

添加的示例

您能提供一个吗?谢谢您的回答。将测试并返回。这有点误导,未定义是由函数中定义的
var ret
行引起的。调用
callback.call(this,ret)
时,它已超出范围。请参阅工作示例。您的第一个基本示例正是我想做的,谢谢您的发布!使用您正在工作的JSFIDLE示例,我遇到了麻烦,至少是因为您使用的是jQuery 1.7(.on),我猜是fancybox 2(modal:modal而不是modal:true,显然是一个选择器“#confirm”作为fancybox的第一个参数,我不知道如何处理)。我们的网站在jQuery1.4.3和fancybox 1.3.4上,我还没能让它工作。你知道如何适得其反吗,或者功能只在较新版本中可用吗?@sootsnoot我刚刚尝试过调整脚本以符合你的目的,但我得出结论,你最好升级