Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用settimeout防止;停止运行此脚本";在jquery中_Jquery_Settimeout - Fatal编程技术网

使用settimeout防止;停止运行此脚本";在jquery中

使用settimeout防止;停止运行此脚本";在jquery中,jquery,settimeout,Jquery,Settimeout,我有一个很长的for循环来验证表中一行一行的文本框(超过1000行):我一直收到“停止运行此脚本”错误。很多网站都提到setTimeout()函数。但我还是不能让它工作。这是我的密码: var numRows = $("#tablex").attr('rows').length; var errorMsg=""; for (var tbRow = 1; tbRow < numRows - 1; tbRow++) { var aRecord = $("#tablex tr:e

我有一个很长的for循环来验证表中一行一行的文本框(超过1000行):我一直收到“停止运行此脚本”错误。很多网站都提到setTimeout()函数。但我还是不能让它工作。这是我的密码:

var numRows = $("#tablex").attr('rows').length;
var errorMsg="";
for (var tbRow = 1; tbRow < numRows - 1; tbRow++) {
        var aRecord = $("#tablex tr:eq(" + tbRow + ") td:eq(1)").attr("innerText");
        var curECD = $("#tablex tr:eq(" + tbRow + ") td:eq(7)").find(':text').val().trim();

        if (curECD != "" && isDate(curECD) == false)
            errorMsg += "Date for " + aRecord + " is invalid<br/>";
 }
var numRows=$(“#tablex”).attr('rows').length;
var errorMsg=“”;
对于(变量tbRow=1;tbRow”;
}
有人能帮忙吗?谢谢

我这样做是为了帮助您使用
setTimeout
以块的形式枚举列表

function enumerate(list, groupSize, callback, complete, debug){
    var iterations = 0;
    for (var i = 0; i < list.length; i+=groupSize, iterations++){
        (function (group, index, isLast){ // new context
            setTimeout(function(){
                for (var j=0; j < group.length;j++){
                    debug && console.log(group[j]);
                    callback.call(group[j], (index+j+1));
                }
                isLast && complete.call();
            }, 1);
        })(list.slice(i, i+groupSize), i, (list.length < i+groupSize)); 
    }
    debug && console.log('iterations: ' + iterations);
}
函数枚举(列表、组大小、回调、完成、调试){
var迭代次数=0;
对于(var i=0;i
可以这样称呼:

var trs = $('#tablex tr'),
    errorMsg = '',
    onItem = function(){
        var aRecord = $("td:eq(1)", this).attr("innerText");
        var curECD = $("td:eq(7)", this).find(':text').val().trim();

        if (curECD != "" && isDate(curECD) == false)
           errorMsg += "Date for " + aRecord + " is invalid<br/>"; 
    },
    complete = function(){
        console.log(errorMsg);
    };

enumerate(trs, 5, onItem, complete);
var trs=$('tablex tr'),
errorMsg=“”,
onItem=函数(){
var aRecord=$(“td:eq(1)”,this.attr(“innerText”);
var curECD=$(“td:eq(7)”,this.find(':text').val().trim();
if(curECD!=“”&&isDate(curECD)=false)
errorMsg+=“+aRecord+”的日期无效
”; }, 完成=函数(){ console.log(errorMsg); }; 列举(trs,5,onItem,完成);
我认为上面建议的第一个解决方案更好,但我认为您也可以像这样递归地执行。取决于您的要求:

var errorMsg="";    

function validateRow(row, callback){
    if(row.size() == 0){
        callback();
    }

    var aRecord = $("td:eq(1)", row).attr("innerText");
    var curECD = $("td:eq(7)", row).find(':text').val().trim();

    if (curECD != "" && isDate(curECD) == false)
       errorMsg += "Date for " + aRecord + " is invalid<br/>"; 

    setTimeout(function(){
        validateRow(row.next(), callback);
    }, 25);
}

validateRow($("#tablex tr:first"), function(){
     alert("finished validating");   
});
var errorMsg=”“;
函数validateRow(行,回调){
if(row.size()==0){
回调();
}
var aRecord=$(“td:eq(1)”,第行).attr(“innerText”);
var curECD=$(“td:eq(7)”,第行).find(':text').val().trim();
if(curECD!=“”&&isDate(curECD)=false)
errorMsg+=“+aRecord+”的日期无效
”; setTimeout(函数(){ validateRow(row.next(),回调); }, 25); } validateRow($(“#tablex tr:first”),函数(){ 警报(“已完成验证”); });

这将调用validateRow并在第一行传递。ValidateRow将在setTimeout上调用自身,并在下一行中传递。当它到达末尾时,它将调用您提供的回调函数

我知道这不是一个答案,但我必须问:为什么你在一个表单中有超过1000个文本输入?它只循环通过第一行,为什么?回答您的问题:因为要求改变了,所以首先是25-50条记录。@user629565-下面是我将如何实现它的。