最近,我使用 jQuery UI Tab 和 Dialog 控件开发了我的主页。主 UI 中有两个选项卡,一个用于“Book”表单,另一个用于“Paper”表单(Book 和 Paper 是我的业务实体页面)。当我第一次运行程序时,一切正常,但第二次无法运行,它会抛出异常:
Error: cannot call methods on dialog prior to initialization; attempted to call method 'open'
经过多次尝试,我没有使用Tab控件,只是在主页上放了两个按钮,并执行类似的任务,即使我运行了很多次一切都很好。所以我认为这是 Tab 控件的问题。
切换Tab项并使用firebug查看html body信息,我注意到每次切换操作都会追加一个新的div行:
<div id="tabsProductMain" class="tabs-bottom ui-tabs ui-widget ui-widget-content ui-corner-all">
<div id="ui-tabs-1" class="ui-tabs-panel ui-widget-content ui-corner-bottom" style="display: none;" aria-live="polite" aria-labelledby="ui-id-2" role="tabpanel" aria-expanded="false" aria-hidden="true">
<div id="ui-tabs-2" class="ui-tabs-panel ui-widget-content ui-corner-bottom" style="display: block;" aria-live="polite" aria-labelledby="ui-id-3" role="tabpanel" aria-expanded="true" aria-hidden="false">
<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-bottom ui-corner-all" role="tablist">
</div>
<div>
<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable" style="display: none; outline: 0px none; z-index: 1000; position: absolute;" tabindex="-1" role="dialog" aria-labelledby="ui-id-1">
<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable" style="display: none; outline: 0px none; z-index: 1000; position: absolute;" tabindex="-1" role="dialog" aria-labelledby="ui-id-1">
<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable" style="outline: 0px none; z-index: 1002; position: absolute; height: auto; width: 400px; top: 39.0003px; left: 428px; display: none;" tabindex="-1" role="dialog" aria-labelledby="ui-id-1">
<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable" style="display: none; outline: 0px none; z-index: 1000; position: absolute;" tabindex="-1" role="dialog" aria-labelledby="ui-id-2">
<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable" style="display: none; outline: 0px none; z-index: 1000; position: absolute;" tabindex="-1" role="dialog" aria-labelledby="ui-id-1">
您可以看到有太多新的丰富的 div 元素附加到最后一个tabindex="-1"和aria-labelledby="ui-id-1"。
任何人都可以找到解决这种情况的解决方案吗?否则,它将在第二次操作中抛出错误。也许我错过了使用 Tab 控件的一些要点?请问有人可以提出任何建议吗?谢谢。
主页代码在这里:
<script>
$(function () {
$("#tabsProductMain").tabs();
$(".tabs-bottom .ui-tabs-nav, .tabs-bottom .ui-tabs-nav > *")
.removeClass("ui-corner-all ui-corner-top")
.addClass("ui-corner-bottom");
$(".tabs-bottom .ui-tabs-nav").appendTo(".tabs-bottom");
initializeTabs();
})
function initializeTabs() {
var urlBook = "/DialogWebApp/ProductMain/BookDialog";
var urlPaper = "/DialogWebApp/ProductMain/PaperDialog";
//dynamically add new tab item
$("#tabsProductMain").tabs('add', urlBook, 'Books');
$("#tabsProductMain").tabs('add', urlPaper, 'Papers');
//remove the default one
$("#tabsProductMain").tabs('remove', 0);
}
</script>
<div id="tabsProductMain" class="tabs-bottom">
<ul>
<li><a href="#fragement-1"><span>One</span></a></li>
</ul>
<div id="fragement-1" style="width:600px;height:500px;"></div>
</div>
BookDialog代码在这里,PaperDialog代码和BookDialog类似:
<script type="text/ecmascript">
$(function () {
$("#BookDialog").dialog({
autoOpen: false, width: 400, height: 330, modal: true, title: "Book Form"
});
$("#BookDialog").html("").load("/ProductWebPortal/Product/Detail2/5")
})
function onOpenBookDialog() {
$("#BookDialog").dialog("open");
}
</script>
<div>
<input type="button" id="btnOpenDialog" value="open book" onclick="onOpenBookDialog();"/>
<div id="BookDialog" style="display:none;width:550px;height:550px;">simple div</div>
</div>