0

我有一个获取一行文本的 jQuery UI 对话框。如果此文本不包含在 localStorage 字典中,我将其插入到字典中。如果存在,我想为用户提供不覆盖“ok”处理程序中现有条目的选项。

因为 jQuery UI 对话框是有状态的并且在多个调用中持续存在,除非明确删除(AFAICT),所以我没有看到一个清晰的路径来呈现“你确定要核对你以前的条目吗?” 警觉而不诉诸……呃……警觉。

问题简洁地说:你能从 jQuery UI 对话框中创建一个确认框吗?

谢谢。

4

3 回答 3

0

我想你可能已经用谷歌搜索了一些东西来找到这些链接:

无论如何都有它并取笑:

  1. jQuery 对话框
  2. jQuery 确认

干杯!!!

于 2012-07-20T12:46:27.460 回答
0

我没有使用过 jQuery UI 对话框,但你总是可以创建你自己的 html 元素并用它们做任何你想做的事情,包括将它们分层放在 jQuery 对话框的顶部。

于 2012-07-19T23:39:33.577 回答
0

好的,事实证明我发现处理这个问题的最好方法是使用闭包。像这样(伪代码):

getThingieName: handler(function() {
  var $dialog;
  $dialog = $('<div id="thingie-name-dialog" class="ui-widget"></div>').html("<p>Enter a name for this thingie</p>\n<input type=\"text\" id=\"dlg-thingie-name\" style=\"width: 80%\" />").dialog({
    autoOpen: false
  }, {
    title: 'enter a name',
    modal: true,
    buttons: {
      Add: function() {
        var value = $('#dlg-thingie-name').val();
        $(this).dialog('close');
        $('#thingie-name-dialog').remove();
        return handler(value);                  // <= closure to handle the onAdd
      },
      Cancel: function() {
        $(this).dialog('close');
        return $('#thingie-name-dialog').remove();
      }
    }
  });
  return $dialog.dialog('open');
}),

getConfirmation: function(message, handler) {
  var $dialog;
  $dialog = $('<div id="confirmation-dialog" class="ui-widget"></div>').html("<p>" + message + "</p>").dialog({
    autoOpen: false
  }, {
    title: 'confirm overwrite',
    modal: true,
    buttons: {
      Ok: function() {
        $(this).dialog('close');
        $('#confirmatio-dialog').remove();
        return handler(true);               // <= closure to handle onOk
      },
      Cancel: function() {
        $(this).dialog('close');
        $('#Thingie-name-dialog').remove();
        return handler(false);              // <= closure to handle onCancel
      }
    }
  });
  return $dialog.dialog('open');
}

// Calling sequence
Snippets.getSnippetName(function(value) {
  if (value == null) return false;
  if (localStorage.getItem(value)) {
    getConfirmation("This thingie, " + value + ", already exists. Overwrite?", function(response) {
      if (response) return localStorage.setItem(value, snippet);
    });
  } else {
    localStorage.setItem(value, snippet);
  }
}

这可能不是最佳代码,但通过将它们嵌入处理程序中,它确实使对话框的触发依赖于按钮推送。

于 2012-07-20T17:47:57.733 回答