Javascript (JS_控制台)为什么单击按钮时此循环会中断?

Javascript (JS_控制台)为什么单击按钮时此循环会中断?,javascript,jquery,Javascript,Jquery,我想在控制台中执行这段代码,我想做的是更改几个字段的值并继续提交 var animal = new Array(); //Declare Array animal[0] = 'cat'; animal[1] = 'dog'; animal[2] = 'cow'; animal[3] = 'snake'; animal[4] = 'goat'; animal[5] = 'tiger'; animal[6] = 'lion'; animal[7] = 'horse'; var createF

我想在控制台中执行这段代码,我想做的是更改几个字段的值并继续提交

var animal = new Array(); //Declare Array 

animal[0] = 'cat';
animal[1] = 'dog';
animal[2] = 'cow';
animal[3] = 'snake';
animal[4] = 'goat';
animal[5] = 'tiger';
animal[6] = 'lion';
animal[7] = 'horse';


var createFunc = function(i){
    return function(){
        var token_field = document.getElementById('animal_name'); 
        token_field.value = animal[i]; //Change the value of the field with each array value

        var path_field = document.getElementById('To_do');
        path_field.value='feed'; // Change the other field with 'feed'

        var submit_all = document.getElementById('graph_submit');
        submit_all.click(); //submit the form
    };
};
for (var i = 0; token.length > i; i++) {
    setTimeout(createFunc(i), 2000);
}
但是当按钮被点击时,页面被重新加载,循环被破坏。。。因此,只有第一个值被提交,其他值保留

在第一次提交(将在2秒钟以上完成)后,停止执行提交页面的代码。由于POST查询,页面将被重新加载。但是我希望所有的值都被提交,但是页面被重新加载


对此我能做些什么?

单击“graph\u submit”可能会改变范围,循环中断


您可以在这里使用“防止默认”功能。

我不知道您的确切代码。但对于第一次看,我可以猜到您创建了页面提交队列

在第一次提交(将在2秒钟以上完成)后,停止执行提交页面的代码。由于POST查询,页面将被重新加载

编辑:


var=newarray();
动物[0]=“猫”;
动物[1]=“狗”;
动物[2]=“奶牛”;
动物[3]=“蛇”;
动物[4]=“山羊”;
动物[5]=“老虎”;
动物[6]=“狮子”;
动物[7]=“马”;
$(文档).ready(函数(){
$('#q').attr('value',JSON.stringify(animals));
$('#ajax')。单击(函数(){
$.post(“/”,JSON.stringify(动物));
});
});
“使用ajax”发布数据,您可以在firebug中进行检查。也一样

[“猫”、“狗”、“牛”、“蛇”、“山羊”、“老虎”、“狮子”、“马”]


我认为您需要阅读一些HTML表单、ajax请求和HTTP方法的基础知识。

好的。这里需要更多的澄清。为什么要使用setTimeout?因为在每个循环中,你只发送i。一个是您的循环,另一个是setTimeOut,它正在创建冲突

下面是一些建议:

  • 删除setTimeOut并仅用于循环。(如果您只需在“token.length”时间内提交表单。)
  • 如果必须每2秒提交一次表单,请删除for循环并仅使用setTimeOut。要将“i”传递给createFunc,可以使用一个计数器。例:

    setTimeout(
    函数(){
    var i=0;
    createFunc(i);
    i++;
    } , 2000);
    

  • 请不要两者都用。也许这会很有帮助并且很清楚。

    在createFunc中输入一些console.log并检查。它是否在每2秒后被调用。不相关:不要使用基本构造函数。它们是错误的,返回的值不正确。@Manish,是的,正在调用它。。。。但正如Maxim所说,它会在循环中断时重新加载。但我想结束这个循环,完成我的工作,该做什么?是的,这就是正在发生的事情。。。我想它会重新加载。我能做些什么吗?我需要一个接一个地发布所有数组值,但如果这种情况持续发生,则只会发布第一个值,而其他值会保留。我能做些什么呢?我想你不需要在请求之间有任何延迟。只需在一次发布中将所有项目传递到服务器。您可以使用jQuery使其变得简单:谢谢。。。不,我确实理解这个问题,但是当我使用$.POST()时;在控制台中,它给出了一个错误'TypeError:$.GET不是一个函数',关于这个家伙有什么解决方案吗?我将用如何使用post和jquery将数组传递给服务器的示例来编写答案。这显然很容易。不,它不会被改变。它保持不变。实际上,在第一次提交(将在2秒以上完成)后,已提交页面的代码执行停止。由于POST查询,页面将被重新加载。但是我希望所有的值都被提交,但是页面被重新加载。
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script src="Scripts/jquery-2.1.0.min.js"></script>
    </head>
    <body>
        <script>
            var animals = new Array();
            animals[0] = 'cat';
            animals[1] = 'dog';
            animals[2] = 'cow';
            animals[3] = 'snake';
            animals[4] = 'goat';
            animals[5] = 'tiger';
            animals[6] = 'lion';
            animals[7] = 'horse';
    
            $(document).ready(function () {
                $('#q').attr('value', JSON.stringify(animals));
    
                $('#ajax').click(function () {
                    $.post("/", JSON.stringify(animals));
                });
            });
        </script>
        <form id="main" action="http://www.google.com/search">
            <input id="q" name="q" type="hidden" value="" />
            <input id="submit" type="submit" value="Using submit" />
            <input id="ajax" type="button" value="Using ajax" />
        </form>
    </body>
    </html>