2011-10-27 9 views
3

I次き:アプリ内のどこでも使える確認用のjQueryダイアログを作成するにはどうすればいいですか?

<ol id="listItems> 
    <li id="listItem-1"> 
     <span class="title">Item 1</span> 
     <span class="delete">delete</span> 
    </li> 
    <li id="listItem-2"> 
     <span class="title">Item 2</span> 
     <span class="delete">delete</span> 
    </li> 
    <li id="listItem-3"> 
     <span class="title">Item 3</span> 
     <span class="delete">delete</span> 
    </li> 
    <li id="listItem-4"> 
     <span class="title">Item 4</span> 
     <span class="delete">delete</span> 
    </li> 
</ol> 

私はここでやりたいことは.deleteをクリックすると、いつでもある、私は確認のためのjQuery UI-ダイアログを表示する、[はい]または[いいえ....ユーザーが言っている場合は、はい、今日削除された場所をクリックして削除を続行します。

jQuery UIダイアログを静的に作成して、任意の数のリスト項目に対して機能させるにはどうすればよいですか?私のアプリでは何もしなくても良いので、リストに限定されているだけではありません。

アイデア?おかげ

答えて

8

jQueryのUIのダイアログを使用して実施例 -

デモ - ライブでhttp://jsfiddle.net/CdwB9/3/

function yesnodialog(button1, button2, element){ 
    var btns = {}; 
    btns[button1] = function(){ 
     element.parents('li').hide(); 
     $(this).dialog("close"); 
    }; 
    btns[button2] = function(){ 
     // Do nothing 
     $(this).dialog("close"); 
    }; 
    $("<div></div>").dialog({ 
    autoOpen: true, 
    title: 'Condition', 
    modal:true, 
    buttons:btns 
    }); 
} 
$('.delete').click(function(){ 
    yesnodialog('Yes', 'No', $(this)); 
}) 

-

デモ - http://jsfiddle.net/CdwB9/4/

$('.delete').live('click', function(){ 
    yesnodialog('Yes', 'No', $(this)); 
}) 
+0

この問題は、ページを更新せずにリスト項目が出て行くことです。外側のdiv(#listItems)にバインドしてそこにある.deleteのクリックをキャプチャする方法はありますか? – AnApprentice

+0

リスト項目が動的な場合は、ライブを使用してダイアログをバインドします。これは、すべての項目にダイアログをアタッチし、動的に追加された項目にも適用されます。 – Jayendra

+0

私はライブを使用することができますが、それはパフォーマンスヒットでしょうか?削除のクリックをキャプチャするために外側のdivにバインドする方法があるのなら、私は興味があります。それは不可能ですか? – AnApprentice

0

あなたはこのライブラリを使用できます。http://labs.abeautifulsite.net/projects/js/jquery/alerts/demo/

は、次に、あなたのような何かを行うことができた:

$(function(){ 
    $(".delete").livequery('click', function(){ 
     jConfirm('Message', 'Title', function(confirmed){ 
      if(confirmed){ 
       alert('Delete confirmed'); 
      } 
     }); 
    }); 
}); 

それは、ページが読み込まれた後に追加DOM要素で動作するので、私はlivequeryプラグインを使用するようにしたいです。しかし、あなたがそれを心配していない場合はlivequerybindに変更してください。

+0

私は既にjQueryダイアログを使用していますが、別のダイアログを追加することはできません。私たちをうまく扱うjqueryのダイアログを使うのはどうですか? – AnApprentice

0

あなたがコントローラであなたのダイアログロジックをラップすることができますオブジェクト。

コントローラオブジェクトをインスタンス化するときに、ダイアログが動作する要素にコントローラオブジェクトを渡すことができ、ajaxサブミッションデータも渡すことができます。

ユーザーがダイアログで[はい]をクリックすると、コントローラにそのデータが含まれ、送信するだけで済みます。このような

何か:あなたは、その後のような何かを行うことができます

MyApp = {} 
MyApp.MyDialog = function(context, ajaxData) { 
    this.context = context; 
    this.ajaxData = ajaxData; 
    this.initializeDialog(); 
} 

MyApp.MyDialog.prototype.initializeDialog = function(){ 
    $(this.context).dialog({ 
     //Your other dialog options here, 
     buttons: { 
      "yes": function(){ 
        //Do ajax post with this.ajaxData 
       }, 
       "No": function(){ 
        this.context.dialog("close"); 
       } 
      } 
    }); 
} 

var dialog = new MyApp.MyDialog("#myElement", {foo: "bar"}); 
1

を私は似たようなやりました。非常に高いレベルでは、クリックの伝搬を停止し、ダイアログを表示してから、レスポンスに基づいて再度クリックをトリガーする必要があります。

var confirmed = false; 

$('span.delete').click(function(e) { 
    if (!confirmed) { 
     var that = $(this); 

     $("#dialog-confirm").dialog({ 
      buttons: { 
       "Delete": function() { 
        confirmed = true; 
        that.trigger('click'); 
        $(this).dialog("close"); 
       }, 
       Cancel: function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 

     e.stopPropagation(); 
    } else { 
     confirmed = false; 
    } 
}); 
+0

これは実行する必要があることのベストサマリーです! –

関連する問題