【问题标题】:Can not open jQuery UI dialog multiple times - test case included无法多次打开 jQuery UI 对话框 - 包括测试用例
【发布时间】:2018-03-12 15:25:30
【问题描述】:

我已经准备好 a simple test case 演示我的问题 -

我使用一个 jQuery UI 按钮打开一个 jQuery UI 对话框:

但是,这只适用于一次。在随后的按钮单击中,我收到错误:

未捕获的错误:无法在初始化之前调用对话框上的方法; 试图调用方法'open'

即使我在代码中的按钮之前初始化了对话框 -

HTML 代码:

<BUTTON ID="newBtn">New game</BUTTON>

<DIV ID="newDlg" TITLE="New game">
    Select game board:
    <BUTTON value="1">Winter</BUTTON>
    <BUTTON value="2" DISABLED>Spring</BUTTON>
    <BUTTON value="3" DISABLED>Summer</BUTTON>
    <BUTTON value="4" DISABLED>Autumn</BUTTON>
</DIV>

JavaScript:

var newDlg = $('#newDlg').dialog({
        modal: true,
        autoOpen: false,
        close: function(e, ui) {
                var bid = parseInt($(this).data('bid'));
                $(this).removeData();
                if (1 <= bid && bid <= 4) {
                        alert('selected board id: ' + bid);
                }
        },
        buttons: {
                'Close': function() {
                        $(this).dialog('close');
                }
        }
});

$('#newDlg button').button().click(function(e) {
        e.preventDefault();
        var bid = this.value;
        newDlg.data('bid', bid);
        newDlg.dialog('close');
});

var newBtn = $('#newBtn').button().click(function(e) {
        e.preventDefault();
        newDlg.dialog('open'); // also tried $('#newDlg') here!
});

我曾尝试使用 jQuery UI 1.11.4 和 1.12.1,但问题仍然存在。

【问题讨论】:

    标签: javascript jquery jquery-ui jquery-ui-dialog jquery-ui-button


    【解决方案1】:

    有趣的故事,问题是:

      $(this).removeData();
    

    这将删除所有data 属性,包括那些用于定义对话框的属性。这可以通过定义要删除的特定数据来解决:

      $(this).removeData('bid');
    

    然后它按预期工作。

    分叉的工作示例:https://jsfiddle.net/Twisty/dz8krbye/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 2017-04-29
      • 2011-03-19
      • 2011-08-31
      • 1970-01-01
      相关资源
      最近更新 更多