2015-01-14 46 views
0

后,这是我的代码javascript函数回调click事件

function confirm(){ 

    okBtn.on('click', function(){ 
     // return true from confirm function 
    }); 
    cancelBtn.on('click', function(){ 
     // return false from confirm function 
    }); 
} 


if(confirm()){ 
    // make something. I need to keep this code here, not in confirm function 
} 

我需要被点击okBtn或cancelBtn后执行回调。我需要保持回调代码不在函数中,因为我有很多使用此函数的情况。

+1

你试图达到什么样的行为?由于多种原因,此处使用的模式在JS中将无法工作。 –

+0

已经有一个函数'“confirm(”message“)”'这样做。 – Bharadwaj

+0

你的问题是什么? –

回答

3

充分利用confirm函数接受回调并调用它的事件处理程序中:

function confirm(callback){ 
    okBtn.on('click', function(){ 
     callback(true); 
    }); 
    cancelBtn.on('click', function(){ 
     callback(false); 
    }); 
} 


confirm(function(result) { 
    // make something. I need to keep this code here, not in confirm function 
}); 

但是没有办法同步处理的事件处理程序(如你似乎打算这样做)。你必须绑定事件处理程序的原因是你不知道事件何时发生。相反,您必须对事件做出反应。你必须习惯这种编码方式,没有办法。

+0

这是我需要的!感谢名单! –

1

而不是使用一个额外的功能,你可以简单地创建一个标志,并且改变它基于用户行为:

var confirm_flag; // this is undefined, which means that no actions have been taken 

okBtn.on('click', function(){ 
    validate(true); 
}); 
cancelBtn.on('click', function(){ 
    validate(false); 
}); 

然后,根据用户的输入,你可以决定你想要哪种行动采取:

function validate(flag) { 
    if(flag) { 
     alert("okBtn has been clicked, it's safe to continue"); 
    }else{ 
     alert("Not good!"); 
    } 
} 

如果你想从一个确认弹出使用返回值,你可以简单地将Window confirm()功能分配给一个变量 - 如果用户单击确定,它将返回true

var x = confirm('Is it safe?'); // will pop a confirm dialog box and return true if ok is pressed and false if cancel is pressed 
+0

我想重要的问题是何时/如何执行'if(confirm_flag){...}'。 –

+0

如果用户确认,他可以将该if语句放在他想要采取的操作之前。基本上,例如,在执行他的一个功能之前,他会检查它。 –

+0

这意味着我可以把它放在事件处理程序绑定之后(这不起作用)。 –

0

http://jsfiddle.net/abwzq32s/

html 

<button type="button" id='button1'>confirm</button> 
<button type="button" id='button2'>cancel</button> 



js 

$('#button1').click(function(){ 
confirm(true); 
}); 
$('#button2').click(function(){ 
    confirm(false); 
}); 

function confirm(check){ 
    if(check){ 
     alert('ok'); 
    }else{ 
     alert('cancel'); 
    } 
} 

我做了一个小样本为您服务。你可以把你的代码写入if条件,或者调用另一个函数,如果你的函数真的很长

0

根据我的理解,你想要的只是当用户点击okBtn和一些代码时执行一些代码,当用户点击cancelBtn。如果你可以用这种方式更改你的代码

function confirm(callback) 
{ 

    okBtn.on('click', function(){ 
     // return true to the callback 
     callback(true) 
    }); 
    cancelBtn.on('click', function(){ 

     // return false to the callback 
     callback(false) 
    }); 
} 
confirm(function(confirmed){ 
    if(confirmed) 
    { 
    // make something 
    } 
    else 
    { 
    // do something 
    } 
}); 
+0

与我的回答有何不同? –

+0

对不起,它没有什么不同,当我开始写答案时,你的答案没有发布,发布后我看到你发布的答案 –