停止在IE中运行此脚本通知

时间:2014-03-26 08:09:57

标签: javascript jquery asp.net-mvc-3 jquery-ui jquery-plugins

我遇到了与#34相关的问题;停止运行此脚本此页面上的脚本导致您的网络浏览器运行缓慢"使用IE 8.我正在尝试做的是从数据库逻辑加载大量行并将其绑定到客户端的jqgrid。

客户端代码 -

$(document).ready(function () {

        var model = @Html.Raw( POSWebManager.MvcApplication.Serializer.Serialize( Model ) );

        var boolRenderer = function( row, column, value ) {
            var html = "<div style='overflow: hidden; text-overflow: ellipsis; text-align: left; padding:4px 4px 2px 2px;";

            if( value === true ) {
                if( column == "Exported" ) {
                    html += "font-weight:bold;background-color:#99FF66;";
                } else if( column == "HasErrors" ) {
                    html += "font-weight:bold;background-color:#FF9999;";
                }
            }

            html += "'>";
            if( value === true ) {
                html += "Yes";
            } else {
                html += "No";
            }

            html += "</div>";
            return html;
        };

        var columns = [
  { name: "ID", text: 'ID', datafield: 'ID', width: 55 },
  { name: "TransactionItemID", text: 'Trans Item ID', datafield: 'TransactionItemID' },
  { name: "Exported", text: 'Exported', datafield: 'Exported', cellsrenderer: boolRenderer },
  { name: "HasErrors", text: 'Has Errors', datafield: "HasErrors", cellsrenderer: boolRenderer },
  { name: "FirstName", text: 'First Name', datafield: 'FirstName', width: 110, type: "string" },
  { name: "LastName", text: 'Last Name', datafield: 'LastName', width: 110, type: "string" },
  { name: "DOB", text: 'DOB', datafield: 'DOB', width: 90, type: "string" },
  { name: "IDNumber", text: 'ID Number', datafield: 'IDNumber', width: 110, type: "string" },
  { name: "StreetAddress", text: 'Street Address', datafield: 'StreetAddress', width: 150, type: "string" },
  { name: "City", text: 'City', datafield: 'City', width: 130, type: "string" },
  { name: "State", text: 'State', datafield: 'State', width: 70, type: "string" },
  { name: "Post", text: 'Post', datafield: 'PostalCode', width: 70, type: "string" },
  { name: "Email", text: 'Email', datafield: 'Email', width: 150, type: "string" },
  { name: "Created", text: 'Created', datafield: 'Created', width: 90, type: "string" },
  { name: "Updated", text: 'Updated', datafield: 'Updated', width: 90, type: "string" },
              { name: "ABN", text: 'ABN Number', datafield: 'ABN', width: 100, type: "string" },
     { name: "CompanyName", text: 'Company Name', datafield: 'CompanyName', width: 100, type: "string" }
        ];

        var adapter= new $.jqx.dataAdapter( { localdata: model,  datatype: "json",  datafields: columns } );

        $("#jqxgrid").jqxGrid( {
            width: 960,
            source:adapter,
            theme: getDemoTheme(),
            pageable: true,
            autoheight: true,
            sortable: true,
            altrows: true,
            enabletooltips: true,
            showfilterrow: true,
            filterable: true,
            columnsresize: true,
            selectable: true,
            pagesize: 25,
            pagesizeoptions: ['25', '50', '100', '1000'],
            selectionmode: 'multiplerowsextended',
            columns: columns

        } );
    } );

任何人都可以告诉我如何禁用此通知

  

不使用注册表或使用ActiveX。   我是jqgrid和jquery的新手,所以请帮我解决这个问题。

谢谢

1 个答案:

答案 0 :(得分:0)

您无法禁用长时间运行或无响应的脚本通知。您可以通过更改代码来解决此问题。

对于长时间运行的过程,通常的解决方法是将工作分解为足够短的块,以便它们不会触发警告,然后处理一大块工作,执行setTimeout(fn, 1)来处理下一个块,依此类推,直到完成所有块。这需要保留一些简单的状态变量来指导每个块。

setTimeout()允许浏览器处理任何其他待处理事件并阻止长时间运行的脚本消息。

this answer: Best way to iterate over an array without blocking the UI中,您将看到一个代码示例,说明如何处理像这样的块中的工作。在答案中甚至还有一个有效的jsFiddle来说明这个概念。

在您的特定情况下,您可以为columns数组中的索引创建状态变量,然后在每个工作块中仅处理几列,适当地递增索引,并在setTimeout()触发时,处理接下来的几列等等。