0

タスクを持つ顧客とのアプリがあります。顧客の新しいタスクを作成するには、追加アイコンをクリックして、新しいタスク フォームが表示されたファンシー ボックスを開きます。これには、次のコーヒー スクリプトがあります。

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!"

これにより、[OK] をクリックして確認ボックスが表示され、何もしないように見えます。次にもう一度試すと、確認ボックスが表示され、[OK] またはキャンセルをクリックすると、正しいファンシーボックスと新しい目標フォームが表示されます。これを最初のラウンドで機能させるにはどうすればよいですか? [OK] を最初にクリックすると、confirm_create_goal のみが設定され、2 回目の試行でファンシーボックスのみが開かれるようです。

最初の試行で「キャンセル」をクリックすると、アラートが正しく表示されます。2回目の試行では、「OK」を押しました。ファンシーボックスはありません。3回目の試行で「OK」を押してfancyboxを取得しますが、「キャンセル」を押すとアラートが表示され、次にfancybox oOが表示されます

4

2 に答える 2

1

fancybox() は、クリック イベントへの応答ではなく、ページの読み込み時に呼び出す必要があります。fancybox() を呼び出すと、単に fancybox が作成され、リスナーなどがアタッチされます。構成するだけです。それは示していません。

これは、API が弱いソースであるため、fancybox を使用しなかった理由の 1 つです。手動で表示する方法はありません。fancybox 2 を使用している場合を除きます。これがどのように機能するかの例を次に示します。

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

于 2012-07-25T18:50:38.043 に答える
0

したがって、上記のように fancybox を呼び出すと、単にクリック イベントにアタッチされ、呼び出されないことがわかります。したがって、確認ボックスの応答に関係なく、もう一度クリックすると、クリックイベントに関連付けられたファンシーボックスが表示されます。

私の解決策は、それが最善かどうかはわかりませんが、確認ボックスをバインドおよびバインド解除するために .on() および .off() を使用することです。その後、 $("a.noGoals").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 は、キャンセルを押すと警告を発する確認ボックスをポップし、[OK] をクリックすると、リンクからバインドを解除し、fancybox を追加し、リンクでクリック イベントをトリガーします。これでファンシーボックスが開き、すべてが正しく表示されます。最後に、(ユーザーがボックスを閉じてタスクを作成しようとした場合に備えて) リンクにバインドするアラートを追加し、目標を作成するように促しました。

于 2012-07-25T21:48:37.327 に答える