我使用jquery来开发移动应用程序,这里是我的代码下面的问题,当我在页面中添加5或6行时一切顺利。但如果我添加多行显示错误消息:Javascript执行已超时。
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');
}
答案 0 :(得分:0)
很难知道,结果有多大。 但是你应该开始缓存你的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');
}
答案 1 :(得分:0)
@soderslatt正朝着正确的方向前进。请参阅http://www.learningjquery.com/2009/03/43439-reasons-to-use-append-correctly了解如何附加到未附加到DOM的元素(并避免重绘和重排),然后将其附加到DOM并仅支付一次惩罚
答案 2 :(得分:0)
以下解决方案将解决您的问题。诀窍是在执行代码之前使用具有非常小的1毫秒的setTimeout函数来等待。使用上述方法将允许您解锁线程并避免超时超时错误。
示例示例:
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();
}