无法多次打开 jQuery UI 对话框 - 包含测试用例
Can not open jQuery UI dialog multiple times - test case included
我已经准备好 a simple test case 演示我的问题 -
我使用 jQuery UI 按钮打开 jQuery UI 对话框:
然而这只有效一次。在随后的按钮点击中,我收到错误:
Uncaught Error: cannot call methods on dialog prior to initialization;
attempted to call method '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,但问题仍然存在。
有趣的故事,问题是:
$(this).removeData();
这将删除所有 data
属性,包括用于定义对话框的属性。这可以通过定义要删除的特定数据来解决:
$(this).removeData('bid');
然后它按预期工作。
我已经准备好 a simple test case 演示我的问题 -
我使用 jQuery UI 按钮打开 jQuery UI 对话框:
然而这只有效一次。在随后的按钮点击中,我收到错误:
Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method '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,但问题仍然存在。
有趣的故事,问题是:
$(this).removeData();
这将删除所有 data
属性,包括用于定义对话框的属性。这可以通过定义要删除的特定数据来解决:
$(this).removeData('bid');
然后它按预期工作。