如何构建一个jQuery对话框确认(是/否),可以在应用程序的任何地方工作

How to build a jQuery dialog for confirmation (yes/no) that can work anywhere in an app?

本文关键字:应用程序 任何 地方工作 确认 构建 何构建 一个 对话框 jQuery      更新时间:2023-09-26

我有以下内容:

<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对话框,是静态的,将为任何数量的列表项工作?更好的是,它将适用于我的应用程序中的任何东西,所以它不仅仅是特定于列表。

想法?由于

使用JQuery UI对话框的示例-

Demo - 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));
})

With live -

Demo - http://jsfiddle.net/CdwB9/4/

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

我也做过类似的事情。在非常高的级别上,您必须停止点击的传播,显示对话框,然后根据响应再次触发点击。

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;
    }
});

您可以使用这个库:http://labs.abeautifulsite.net/projects/js/jquery/alerts/demo/

然后你可以这样做:

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

我喜欢使用livequery插件,因为它与加载页面后添加的DOM元素一起工作。但是如果你不担心这个,把livequery换成bind

您可以将对话框逻辑包装在控制器对象中。

然后,当您实例化控制器对象时,您可以将它传递给对话框将作用的元素以及ajax提交数据。

当用户在对话框中单击yes时,现在控制器中包含了该数据,您可以提交它。

像这样:

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"});
相关文章: