Jquery ui 带有AJAX加载的jqGrid的jQuery UI对话框未关闭
我在jQueryUI对话框中有一个由AJAX加载的jqGrid。除了对话框没有关闭外,一切正常。当我在两个按钮中单击时,它会到达警报,但对话框不会关闭Jquery ui 带有AJAX加载的jqGrid的jQuery UI对话框未关闭,jquery-ui,jqgrid,Jquery Ui,Jqgrid,我在jQueryUI对话框中有一个由AJAX加载的jqGrid。除了对话框没有关闭外,一切正常。当我在两个按钮中单击时,它会到达警报,但对话框不会关闭 buttons: { 'Confirm': function() { alert('OK Confirm'); $('#test-grid').dialog('close'); }, 'Cancelar': function() { alert('OK Cancel');
buttons: {
'Confirm': function() {
alert('OK Confirm');
$('#test-grid').dialog('close');
},
'Cancelar': function() {
alert('OK Cancel');
$(this).dialog('close');
}
}
我试过使用$(“#测试网格”).dialog('close')
和$(this).dialog('close')
,但没有人能工作。如果我删除AJAX加载的jqGrid,一切都会正常工作。
Firefox和Chrome上的错误控制台为空
我正在加载jqGrid页面,其中包含:
$('#test-grid').load('/grid').dialog('open');
有人能帮我吗
更新
我尝试使用AJAX加载一个简单的HTML代码段,但问题仍然存在。问题是对
load
的调用干扰了打开对话框的调用。您可以通过将AJAX内容加载到测试网格的子元素中来解决这个问题。例如:
$('#test-grid-child').load('/grid');
$('#test-grid').dialog('open');
$('#test-grid-child').load('ajax/test.html', function() {
alert('Load was performed.'); // Perform any necessary UI action here
});
更新
我只是读了这篇文章,并对此进行了更多的思考。发生的情况是,当代码$(“#测试网格”).load(“/grid”).dialog('open')执行code>,启动AJAX请求并立即创建对话框。但是一旦加载
的AJAX请求完成,jQuery就会返回并覆盖#测试网格
的内容。这解释了为什么对话框无法关闭,因为基础标记是从对话框对象下面修改出来的
将数据检索到子元素可以消除这个问题,因为load
和dialog
现在分别处理DOM的不同部分
注意,如果Ajax请求需要很长时间才能完成,您可能需要考虑实现<代码>完整的函数来给用户反馈-可能是通过显示一个旋转器直到数据准备好为止。例如:
$('#test-grid-child').load('/grid');
$('#test-grid').dialog('open');
$('#test-grid-child').load('ajax/test.html', function() {
alert('Load was performed.'); // Perform any necessary UI action here
});
无论如何,信息可能比您需要的要多,但我只是想趁这个问题在我脑海中仍然清晰的时候更新它…问题是对load
的调用干扰了打开对话框的调用。您可以通过将AJAX内容加载到测试网格的子元素中来解决这个问题。例如:
$('#test-grid-child').load('/grid');
$('#test-grid').dialog('open');
$('#test-grid-child').load('ajax/test.html', function() {
alert('Load was performed.'); // Perform any necessary UI action here
});
更新
我只是读了这篇文章,并对此进行了更多的思考。发生的情况是,当代码$(“#测试网格”).load(“/grid”).dialog('open')执行code>,启动AJAX请求并立即创建对话框。但是一旦加载
的AJAX请求完成,jQuery就会返回并覆盖#测试网格
的内容。这解释了为什么对话框无法关闭,因为基础标记是从对话框对象下面修改出来的
将数据检索到子元素可以消除这个问题,因为load
和dialog
现在分别处理DOM的不同部分
注意,如果Ajax请求需要很长时间才能完成,您可能需要考虑实现<代码>完整的函数来给用户反馈-可能是通过显示一个旋转器直到数据准备好为止。例如:
$('#test-grid-child').load('/grid');
$('#test-grid').dialog('open');
$('#test-grid-child').load('ajax/test.html', function() {
alert('Load was performed.'); // Perform any necessary UI action here
});
无论如何,比您可能需要的更多的信息,但我只是想在这个问题还记忆犹新的时候更新它…您能告诉我们您用于创建实际网格的代码吗?是的,我可以,但是使用AJAX加载的任何内容都会导致这个问题,不仅仅是jqGrid.Hmmm。。。您是否尝试过使用load
将数据检索到test grid
的子元素中,而不是直接加载该元素?没问题,我很高兴您能够正常工作!)我只是重新发布了这个评论作为回答…你能告诉我们你用来创建实际网格的代码吗?是的,我能,但是使用AJAX加载的任何内容都会导致这个问题,不仅仅是jqGrid.Hmmm。。。您是否尝试过使用load
将数据检索到test grid
的子元素中,而不是直接加载该元素?没问题,我很高兴您能够正常工作!)我只是重新发布了评论作为回答。。。