0

我有一个带有 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();
});
4

3 回答 3

0

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

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

作为对您的评论的回应,我将拆分链接的方法调用,然后e.preventDefault()在 Chrome 调试器中放置一个断点,这样您就可以确保一切都被实际命中了。

$('#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实际返回的是你想要的元素?

于 2013-05-29T14:41:47.373 回答
0

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

var list = $('.content-center').contents().find('#list')
list.setGridParam({
    url: 'filteredsearch.html?option=1'
})
list.trigger('reloadGrid');
于 2013-05-29T14:42:36.403 回答
0

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

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

然后打电话

window.top.reloadEventList()

代替

list.trigger('reloadGrid')
于 2014-02-17T07:54:42.327 回答