【问题标题】:javascript exceed timeoutjavascript超过超时
【发布时间】:2012-12-01 09:27:25
【问题描述】:

我使用 jquery 开发移动应用程序,下面是我的代码,当我在包含的页面中添加 5 或 6 行时一切正常。但是如果我添加多行显示错误消息:Javascript execution exeeded timeout.

function succes_recu_list_rubrique(tx, results)   //apés avoire remplir sqlite
{
    console.log('ENTRééééééééééééééé---')

    $('#lbtn').prepend("<legend>Selectionner un Rubrique</legend><br>");
    for( var i=0; i<results.rows.length; i++  )            //Remplir tableau liste des identifiants étapes
    { 
    $('#lbtn').append("<input name='opt1' checked type='radio' value="+results.rows.item(i).IdRubrique+"    id="+results.rows.item(i).IdRubrique+" />");
    $('#lbtn').append('<label for='+results.rows.item(i).IdRubrique+'>'+results.rows.item(i).LibelleRubrique+'</label>');   
    }
    $('#lbtn').append('<a href="#page_dialog2"     class="offer2"      data-rel="dialog"    data-role="button" >Consulter</a>').trigger('create');
    $('#lbtn').append('<a href="#'+id_grp_rub+'"   data-role="button"             data-rel="back" data-theme="c" >Cancel</a> ').trigger('create');

}

【问题讨论】:

  • 您能否提供更多有关您要添加的“行”的信息?在哪里?

标签: javascript jquery cordova jquery-mobile


【解决方案1】:

很难知道 results.row 有多大? 但是你应该开始缓存你的 jQuery 对象并尽量减少你的 DOM 插入

以下内容未经测试,但它会为您指明正确的方向:

function succes_recu_list_rubrique(tx, results)   //apés avoire remplir sqlite
{
    console.log('ENTRééééééééééééééé---')

    var htmlToAppend = "";
    var $lbtn = $('#lbtn');

    htmlToAppend += "<legend>Selectionner un Rubrique</legend><br>";

    for( var i=0; i<results.rows.length; i++  )            //Remplir tableau liste des identifiants étapes
    { 
        htmlToAppend += "<input name='opt1' checked type='radio' value="+results.rows.item(i).IdRubrique+" id="+results.rows.item(i).IdRubrique+" />";
        htmlToAppend += "<label for='+results.rows.item(i).IdRubrique+'>'+results.rows.item(i).LibelleRubrique+'</label>";
    }
    $lbtn.append(htmlToAppend);

    $lbtn.append('<a href="#page_dialog2"     class="offer2"      data-rel="dialog"    data-role="button" >Consulter</a>').trigger('create');
    $lbtn.append('<a href="#'+id_grp_rub+'"   data-role="button"             data-rel="back" data-theme="c" >Cancel</a> ').trigger('create');

}

【讨论】:

  • @user1866265 对此有何回应?
  • 好吧a给了你一个答案,你试过了吗/它有用吗? results.row 包含多少条目?
  • 是的,我尝试了你的答案,但同样的错误。 results.row 包含 = 150
【解决方案2】:

@soderslatt 正朝着正确的方向前进。请参阅http://www.learningjquery.com/2009/03/43439-reasons-to-use-append-correctly,了解如何附加到未附加到 DOM 的元素(并避免重绘和重排),然后将其附加到 DOM 并只支付一次罚金

【讨论】:

    【解决方案3】:

    以下解决方案将解决您的问题。诀窍是使用 setTimeout 函数,在执行代码之前等待非常少的 1 毫秒。使用上述方式将允许您解锁线程并避免超出超时错误。

    示例:

    function succes_recu_list_rubrique(tx, results) {
    
        var i = 0;
    
        function appendOperation() {
            $('#lbtn').append(
                [
                    "<input name='opt1' checked type='radio' value=", results.rows.item(i).IdRubrique, " id=", results.rows.item(i).IdRubrique, " />",
                    "<label for=", results.rows.item(i).IdRubrique, ">", results.rows.item(i).LibelleRubrique, "</label>"
                ].join("")
            );
    
            if (i++ < results.rows.length) {
                setTimeout(appendOperation, 1);
            } 
        }
        appendOperation();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-22
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 2012-06-07
      • 2016-09-25
      • 1970-01-01
      相关资源
      最近更新 更多