(JS_console)为什么单击按钮时此循环会中断?

时间:2014-02-19 06:34:48

标签: 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 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查询,页面将重新加载。但我希望提交所有值,但重新加载页面。

我该怎么办?

3 个答案:

答案 0 :(得分:0)

有可能点击'graph_submit'范围会发生变化并且循环中断。

您可以在此处使用防止默认功能。

答案 1 :(得分:0)

我完全不知道你的代码。但是对于第一眼看,我猜你可以创建页面提交队列。

第一次提交后(将在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>

“使用ajax”发布数据,您可以查看firebug。它会是一样的。

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

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

答案 2 :(得分:0)

确定。这里需要更多的澄清。你为什么要使用setTimeout?因为在每个循环中你只发送i。一个是你的循环,另一个是setTimeOut,它会产生冲突。

所以这是一些建议:

  1. 删除setTimeOut并仅用于for循环。 (如果您只需要提交表单'token.length'时间。)
  2. 如果您必须在每2秒后提交表单,则删除for循环并仅使用setTimeOut。并且为了将'i'传递给createFunc,您可以使用一个计数器。例如:

    setTimeout( 
      function(){
        var i =0;
        createFunc(i);
        i++;
    } , 2000);
    
  3. 请不要同时使用两者。也许这将有用而且清晰。