我有一个带有jquery UI对话框的html。 然后我更改包含对话框的div 但对话框的内容不会改变。 我希望能够一起更改对话框及其包含的div 如果我只更改对话框div它按预期工作,但这不是我需要的。
示例代码: http://jsfiddle.net/JpLzh/13/
对话框内的文字应从“原始”更改为“新”,但不是 对话框外的文本确实从“main”更改为“changed main”。
我做错了什么,我怎样才能克服这个问题?
修改
我甚至需要在更改发生之前使用对话框。创建html后很长时间都会发生更改。
html
<div id="main">
main
<br>
<button id="opener">Open Dialog</button>
<div id="dialog">
original
</div>
</div>
<script>
$( "#dialog" ).dialog({
autoOpen: false,
height: 500,
width: 800,
modal: true,
resizable:false,
draggable:true,
});
$( "#opener" ).click(function() {
$( "#dialog" ).dialog( "open" );
});
</script>
onload javascript
$('#main').html('<div id="main">altered main<br><button id="opener">Open Dialog</button><div id="dialog">new</div></div>');
$( "#dialog" ).dialog({
autoOpen: false,
height: 500,
width: 800,
modal: true,
resizable:false,
draggable:true,
});
$( "#opener" ).click(function() {
$( "#dialog" ).dialog( "open" );
});
答案 0 :(得分:1)
这是因为你正在创建2个对话框。要更改对话框的内容,您只需更改对话框div:
<div id="main">
main
<br>
<button id="opener">Open Dialog</button>
<button id="changer">change Dialog</button>
<div id="dialog">
original
</div>
</div>
<script>
$( "#dialog" ).dialog({
autoOpen: false,
height: 200,
width: 200,
modal: true,
resizable:false,
draggable:true,
});
$( "#opener" ).click(function() {
$( "#dialog" ).dialog( "open" );
});
$( "#changer" ).click(function() {
$( "#dialog" ).html("new");
});
</script>
答案 1 :(得分:1)
当您从元素#dialog
创建对话框时,该元素将移出其原始父级(#main
)。如果在显示对话框时更改父级内容,则不会更改对话框(这是一件好事,否则会删除对话框)。
您需要做的是分别更改对话框内容:
$( '#main' ).html( 'The new content except #dialog' );
$( '#dialog' ).html( 'New dialog contents' );
(顺便说一下,你不应该这样做:$( '#main' ).html( '<div id="main">...' )
你正在更改内部 HTML内容,所以你不应该重复容器。否则结果是{ {1}})
答案 2 :(得分:1)
我找到了解决方案。 看起来我无法更改包含div的对话框,因为它已经是.dialog()方法的对话框,当我更改包含的html时,它不会影响已经创建的对话框。
我找到的解决方案是使用.destroy()方法销毁旧对话框,然后从新更改的html中创建一个新对话框。
我的解决方案: http://jsfiddle.net/JpLzh/12/
<div id="main">
main
<br>
<button id="opener">Open Dialog</button>
<button id="changer">Change div</button>
<div id="dialog">
original
</div>
</div>
<script>
$( "#dialog" ).dialog({
autoOpen: false,
height: 500,
width: 800,
modal: true,
resizable:false,
draggable:true,
});
$( "#opener" ).click(function() {
$( "#dialog" ).dialog( "open" );
});
</script>
function change_div()
{
$( "#dialog" ).dialog( "destroy" );
$('#main').html('<div id="main">altered main<br><button id="opener">Open Dialog</button><div id="dialog">new</div></div>');
$( "#dialog" ).dialog({
autoOpen: false,
height: 500,
width: 800,
modal: true,
resizable:false,
draggable:true,
});
$( "#opener" ).click(function() {
$( "#dialog" ).dialog( "open" );
});
}
$( "#changer" ).click(function() {
change_div();
});
答案 3 :(得分:0)
您正在复制脚本代码,但运行的代码是HTML部分(代码之间)的代码,它缺少javascript部分的第1行。
你应该把你的Javascript部分放在这个:
$(document).ready(function () {
//JS Code here...
});
并删除HTML中的部分。
答案 4 :(得分:-1)
使用此代码它将起作用.....
$('#main').html('<div id="main">altered main<br><button id="opener" onclick="OpenDialog();">Open Dialog</button><div id="dialog">new</div></div>');
$( "#dialog" ).dialog({
autoOpen: false,
height: 500,
width: 800,
modal: true,
resizable:false,
draggable:true,
});
function OpenDialog() {
$( "#dialog" ).dialog( "open" );
}
处理完毕后会产生这个html代码
<div id="main">
main
<br>
<button id="opener" onclick="OpenDialog()">Open Dialog</button>
<div id="dialog">
original
</div>
</div>
<script>
$( "#dialog" ).dialog({
autoOpen: false,
height: 500,
width: 800,
modal: true,
resizable:false,
draggable:true,
});
function OpenDialog() {
$( "#dialog" ).dialog( "open" );
}
</script>