0

我有页面 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。

4

2 回答 2

2

Changing window.location won't submit the values in your form to the new location. You'll have to submit the form instead.

if(printVal.counter==0)
    document.getElementsByTagName("form")[0].submit();
}
于 2012-08-17T19:22:24.620 回答
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

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

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

作为 html 输入元素的名称属性,我们还可以像这样指定一个数组<input "name=itm[]">:(在制作“列表框”时也可以这样做<select name="var[]" multiple="yes">)。让我们在列表中很好地显示它们。因此,每当您在 textarea/inputfield 中按回车键时,都会将包含输入字段的列表项添加到表单中。

当计时器达到零时,您需要使用提交表单form.submit()(正如 Andreas 还指出的那样)。

这里有一个简化但完全有效的示例:

<!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>

当然,您可以在这个 fiddle 中找到一个工作演示(请注意,这个演示运行 10 秒而不是 60 秒)。

现在您的 php-scriptnext.php将收到一个变量:val正如您已经命名的那样),但这个变量实际上是一个包含所有输入项的数组(由 enter 键分隔)。
多田!

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

祝你好运!!

于 2012-08-17T23:25:36.890 回答