在n秒内重定向并传递值

时间:2012-08-17 19:16:11

标签: php javascript

我有页面A和B.一旦页面A加载,我将从用户那里获得输入。 60秒后,页面将自动重定向到页面B.我使用下面的代码,但值没有通过。

<html>
<head>
  <script type="text/javascript">
     function printVal()
     {
       printVal.counter--;
       document.getElementById("timer").innerHTML = printVal.counter;
       if(printVal.counter==0){
         window.location="next.php";
       }
     }

     function callfun()
     {
       setInterval(printVal,1000);
     }

     printVal.counter=61;
  </script>
</head>
<body>
  <input type="submit" value="Click Me" onclick="callfun()">
  <p id="timer"></p>
  <form method='post' action='next.php'>
     <input type='text' name='val'>
  </form>
</body>
</html>

我要创建一个列表。一旦用户在文本框中键入内容并按下输入,它应该将其添加到列表框中。 60秒后,我希望列表框中的值传递给next.php。

2 个答案:

答案 0 :(得分:2)

更改window.location不会将表单中的值提交到新位置。您必须提交表单。

if(printVal.counter==0)
    document.getElementsByTagName("form")[0].submit();
}

答案 1 :(得分:1)

这是一个非常广泛的问题,可以尝试和有效地回答。

让我们从您的列表框开始:您问:once user types something in text box and press enter it should go and add in a list box. and after 60 seconds i want the values in the list box to be passed to next.php

如果用户不对列表框中的(数据)做任何事情,为什么要将数据放在列表框中?所以我想你的想法是使用一个列表框来保存单独的值然后你可以POST到你的next.php。

划定你说的价值?成交。让我们忽略json,ajax等等,并用一些简单的普通的香草javascript“教你如何钓鱼”。我会把模块化给你!

作为html input-element的name-attribute,我们也可以像这样指定一个 array <input "name=itm[]">(你也可以在制作'listbox'时这样做,也就是{{1 }})。让我们在列表中很好地显示它们。因此,每当您点击textarea / inputfield中的回车键时,包含inputfield的列表项就会添加到表单中。

当计时器达到零时,您需要使用<select name="var[]" multiple="yes">提交表单(正如Andreas所指出的那样)。

这是一个简化但完全有效的例子:

form.submit()

当然你可以找到working demo in this fiddle(注意这个演示运行10秒而不是60秒)。

现在你的php脚本<!DOCTYPE html><html><head><title>demo</title> <script type="text/javascript"> window.onload=function(){ itmLi=document.createElement('li'); itmInp=itmLi.appendChild(document.createElement('input')); itmInp.type='text'; itmInp.name='val[]'; theItms=document.getElementById('theItems'); fetchItem=function(el,evt){ var itmAct, keyCode=(evt.which) ? evt.which : event.keyCode; if (keyCode == 13){ itmAct=theItms.appendChild(itmLi.cloneNode(true)); itmAct.firstChild.value=el.value; el.value=''; return false; } }; theTmr=document.getElementById('tmrOut'); myTimer=function(){ var t=Number(theTmr.innerHTML); if(t){ theTmr.innerHTML=t-1; window.setTimeout(myTimer,1000); } else { theItms.parentNode.submit(); } }; window.setTimeout(myTimer,1000); document.getElementById('inpTxt').focus(); //sigh.. firefox does not work AGAIN. }; </script> </head><body> <p>Time left: <span id="tmrOut">60</span></p> <textarea id="inpTxt" onkeyup="return fetchItem(this,event);"></textarea> <form id="theForm" method="post" action="next.php"> <ul id="theItems"></ul> </form> </body></html> 将收到一个变量:next.php(正如你已经命名的那样),但是这个变量实际上是一个包含所有项目的数组输入(由enter键分隔) 田田!

由于你只询问如何将变量传递给php,我的答案就在这里停止。如果您在接收php端需要帮助,我建议您先RTM

祝你好运!!