【问题标题】:JQGRID: Trigger Reload not working on iFrameJQGRID:触发器重新加载在 iFrame 上不起作用
【发布时间】:2013-05-29 14:24:14
【问题描述】:

我有一个带有 iFrame 的网页。它使用 jqGrid 表加载网页(相同域)。我现在要做的是:

  • 您点击一个名为search 的链接,它会打开一个对话框,其中包含过滤表单以过滤您的搜索。
  • 当您在对话框中按下search 按钮时,它会更改jqGrid url 参数,它应该是.trigger('reloadGrid')

除了reloadGrid,我不知道为什么。

有什么建议吗?

代码:

// DIALOG-ACTION-SEARCH IS THE BUTTON CLASS
$('#dialog').find('.dialog-action-search').button({icons: {
    primary: 'ui-icon-search'
}, text: true}).click(function(e) {
    e.preventDefault();
    $('.content-center').contents().find('#list').setGridParam({
        url: 'filteredsearch.html?option=1'
    }).trigger('reloadGrid');
    $('#dialog').dialog('destroy');
    $('#dialog').remove();
});

【问题讨论】:

  • 您的datatype 在网格的初始设置中设置为什么?
  • json,问题是我没有收到任何错误。就像永远不会重新加载一样,好像由于某种原因无法重新加载一样。它改变了url,因为我在我的jqGrid 的navGrid 上按下了刷新按钮,并且由于url 不存在而引发错误。此外,尝试使用存在且未收到任何数据的url。按下刷新按钮时我的 jqGrid 变空,但仍未触发 reloadGrid
  • 看我的回答。如果这不起作用,您是否对其进行了修改以查看它是否真的拨打了电话?

标签: javascript jquery jqgrid


【解决方案1】:

setGridParam 返回一个jqGrid 对象,而不是jQuery 对象,所以我很确定你不能链接trigger 方法。试试这个:

var list = $('.content-center').contents().find('#list')
list.setGridParam({
    url: 'filteredsearch.html?option=1'
})
list.trigger('reloadGrid');

【讨论】:

  • 感谢您的回答,但我已经尝试过了,但它不起作用:S
【解决方案2】:

我发现在使用 JSON 数据调用 trigger('reloadGrid') 之前,您应该重置 datatype 参数。

$("#grid").jqGrid('setGridParam', { datatype: 'json' });

作为对您的 cmets 的响应,我会拆分链接的方法调用,然后在 Chrome 调试器中的 e.preventDefault() 上放置一个断点,这样您就可以确保所有内容都被实际命中。

$('#dialog').find('.dialog-action-search').button(
    { 
        icons: { primary: 'ui-icon-search' } ,
        text: true
    });
$('#dialog').find('.dialog-action-search').click(function(e) {
    e.preventDefault();
    var grid = $('.content-center').contents().find('#list');
    $(grid).jqGrid('setGridParam', { url: 'filteredsearch.html?option=1' });
    $(grid).jqGrid('setGridParam', { datatype: 'json' });
    $(grid).trigger('reloadGrid');
    $("#dialog").dialog('destroy');
    $("#dialog").remove();
});

虽然我喜欢尽可能地进行链接,但在这种情况下,我认为如果不做一些更明确的事情,你就不会找到问题的根源,尤其是在使用 .find 时。你怎么知道.find实际上是在返回你想要的元素?

【讨论】:

  • 我试过了,但还是不行检索数据。
  • 所以您实际上可以看到它发送请求? Chrome 调试器中是否存在 Javascript 错误?更好的是,您是否使用 Fiddler 来跟踪请求和响应?
  • 当我在navGrid 按下refresh 按钮时,它会发送请求。它不会像.trigger('reloadGrid'); 那样自动执行此操作。然后,该方法永远不会执行,我不知道为什么。它没有在 Chrome 调试器中给出 Javascript 错误,而且我没有上传 Fiddle 来显示示例,因为我不知道它是否能与 iFrame 一起正常工作
  • 我也尝试删除所有并仅访问该列表并尝试使用$('.content-center').contents().find('#list').trigger('reloadGrid'); 重新加载它,但它也不起作用。
  • 从来没有用过,但我告诉过你那行不通。 Chrome 没有在network 标签上显示任何请求。另外,当我加载页面时,网格中填充了一些数据,但是当您尝试过滤时它应该显示空网格,因为我没有在服务器端实现过滤器并且只有当我按下 jqGrid @ 的刷新按钮时才会这样做987654333@,它永远不会触发reloadGrid
【解决方案3】:

我遇到了同样的问题。我没有时间调查它发生的原因,但找到了解决方法。 在我声明的带有网格的 iframe 内加载的 javascript 文件中

window.top.reloadEventList = function () {
$("#grid").trigger("reloadGrid");};

然后调用

window.top.reloadEventList()

而不是

list.trigger('reloadGrid')

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多