0
votes

I have a jQueryUI Tabs control on a web page. Each tab contains one or more Slickgrid grids.

Sometimes, but with no particular pattern that I have been able to discover, when removing tabs (therefore removing instances of Slickgrid), I get:

// slick.grid-2.0.merged.min.js: Microsoft JScript runtime error: Invalid argument
Z[0].styleSheet.cssText=a.join(" ")

which then propogates to

// jquery-1.7.1.min.js: Microsoft JScript runtime error: Exception occurred.
a.execScript||function(b){a.eval.call(a,b)})(b)

What's causing this issue and how can I work around / resolve it?

1
This code would typically get called only when creating new instances of SlickGrid.Tin
Also, make sure you destroy the SlickGrid instances before disposing of them by calling grid.destroy().Tin

1 Answers

0
votes

Following the comment from @Tin, I ensured that every instance of SlickGrid was destroyed prior to the HTML element it was associated with being replaced by an Ajax result.

Leveraging

Is there a way to get an instance of SlickGrid from an element

I ended up with code like this:

Initialize SlickGrid instance:

grid = new Slick.Grid("#myGridDiv", myDataView, myColumns, myOptions);
$('#myGridDiv').data('slickgrid', grid);

General cleanup function:

function cleanupSlickGrid() {
    //@* Cleanup slickgrid instances.  See: https://stackguides.com/questions/10129069/invalid-argument-error-with-slickgrid *@
    var grids = $('.slick'); //@* I add the class 'slick' to each grid *@
    jQuery.each(grids, function(i, val) {
        var grid = $(this).data('slickgrid');
        grid.destroy();
        });
}

use general cleanup function like this:

$.ajax(
{
    url: removeUrl,
    type: "POST",
    success: function (data)
    {
        cleanupSlickGrid();
        $('#myDivId').html(data); 
    }
}