2012-07-25 120 views
0

我有一个应用程序与谁有任务的客户。要为客户创建新任务,您可以单击一个添加图标,该图标将打开显示新任务窗体的fancybox。这有以下咖啡脚本:在fancybox之前显示确认框

jQuery -> 
    $("a.fancyForm").fancybox 
    scrolling: "no" 
    titleShow: false 

但是,客户也必须有一个目标,否则任务是零。所以这种关系实际上是客户有许多目标,它有许多任务。如果客户已经有了一些目标,那么表格会简单地询问你的目标。如果客户没有目标,那么我想弹出一个确认框,询问用户是否想要现在制定目标。这是我目前使用的咖啡脚本:

$("a.noGoals").click (e) -> 
    e.preventDefault() 
    confirm_create_goal = confirm("There is currently no Goal for this customer. Would you like to create one?") 
    if confirm_create_goal 
    $("a.noGoals").fancybox() 
    else 
    alert "You won't be able to create tasks until a goal is created!" 

这会弹出确认框,通过单击确定,看起来什么都不做。如果您再次尝试,则会显示确认框,如果您单击确定或取消,则会显示正确的fancybox和我的新目标表单。我如何让这个第一次工作?看起来第一次点击确定它只设置confirm_create_goal,然后在第二次尝试时才打开fancybox。

如果我在第一次尝试时单击“取消”,它会正确显示警报。第二次尝试我打“好”没有fancybox。第三次尝试点击“确定”得到fancybox,但如果我点击“取消”,我得到警报,然后fancybox o.O

回答

0

因此,原来在调用的fancybox如上简单地将其连接到click事件,不会调用它。所以,当你再次点击时,不管你的确认框响应如何,它都会显示现在附加到click事件的fancybox。我的解决方案虽然不确定是否最好,但是使用.on()和.off()绑定和解除绑定确认框,然后我可以在$(“a.noGoals”)之后触发fancybox。 .fancybox()调用:

confirm_create_goal = (e) -> 
    e.preventDefault() 
    confirm_create = confirm("There is currently no Goal for " + $(this).data("customer") + "'s company, " + $(this).data("company") + ". Would you like to create one?") 
    if confirm_create 
    $("body").off "click", "a.noGoals", confirm_create_goal 
    $("a.noGoals").fancybox(onClosed: -> 
     $("body").on "click", "a.noGoals", -> 
     alert "Create a Goal!" 
    ).trigger "click" 
    else 
    alert "You won't be able to create tasks until a goal is created!" 

$("body").on "click", "a.noGoals", confirm_create_goal 

因此函数confirm_create_goal弹出一个确认对话框,如果你打取消,如果您单击确定它没有绑定本身从链接,给出了一个警告,添加的fancybox和触发器的单击事件链接。这将打开fancybox,并且所有内容都能正确显示。最后,我添加了一个提醒来绑定链接(以防用户关闭该框并尝试创建任务),提醒他们创建目标。

1

fancybox()应该在页面加载时被调用,而不是响应点击事件。调用fancybox()只需创建fancybox并附加侦听器等。它只是配置它。它没有显示它。

这是我没有使用fancybox的原因之一,因为它是API软件。没有手动显示它的方法。除非你使用的fancybox 2.下面是如何可能的工作的例子:

http://jsfiddle.net/9wAdV/1/

+0

嗯......很快只是试图摆脱这一呼吁的(变化确认为=>“目前还没有目标,你想创建一个?”),它并没有改变行为。如果您在第一次尝试时单击取消,则会触发警报。快速编辑这个问题来反映这一点。 – 2012-07-25 18:57:27

+0

现在更新我的答案。你没有正确地使用fancybox()来做你想做的事情。 – chubbsondubs 2012-07-25 21:38:11

+0

谢谢,我实际上正在撰写我的解决方案,因为你发布了这个。用一个奇怪的解决方法来得出同样的结论。让我知道你的想法。 – 2012-07-25 21:50:57