声明一个JavaScript变量,它将保存php变量

时间:2014-03-31 13:36:20

标签: javascript php html

我有一个用于制作问卷的应用程序。用户有index.php页面,他们在那里创建问题并选择最少的答案数,然后他们有process.php页面,他们可以输入答案或添加更多答案

问题:当用户点击add more button时,它会创建特定问题的文本区域,但名称错误。添加更多按钮应添加textarea并根据定义的textareas的最小值更改其名称。所以,如果你是前任。在问题2中有4个定义的textareas,下一个textareas应该像odg25,odg26,odg27,odg28等......

问题在于变量$ k(process.php) - 因为它没有在addmore函数中定义,但我不知道如何以某种方式通过这部分代码来实现它。

THIS IS THE TESTING LINK

的index.php

<input id="btntxt" type="submit" value="TEXT" onclick="addtxt();" /><br/><br/>

<form action="process.php" method="post">
Title: <br/><input type="text" name="naslov" size="64" required ><br/>
Maximum characters: <br/><input type="text" name="chars" size="64"><br/><br/>
<div id="brain1"></div><br/>
<input type="submit" name="submit" value="CONFIRM"><br/>
</form>

PROCESS.PHP

<script type="text/javascript">
<?php $chars = $_POST['chars']; ?>
function addmore(index) {
    var textarea = document.createElement("textarea");
        textarea.name = "odg" + index + //WHAT SHOULD I ADD HERE???;
        textarea.rows = 3;
        textarea.setAttribute('maxlength',<?php echo $chars ?>);
        var div = document.createElement("div");
        div.innerHTML = textarea.outerHTML;
        document.getElementById("inner"+index).appendChild(div);
}
</script> 
<body>
<?php
$bla = "";
$pitanje = $_POST['question'];
$length = count($_POST['question']);
$req = $_POST['req'];
$requiem = '';
$min = $_POST['min'];
$area = array("","","","","","","","","","","","","","","");

for($j=1; $j<$length+1; $j++) {
if($_POST['question'][$j] != "") {
    if(($min[$j])!="") {
    for($k=1;$k<=$min[$j];$k++) {
    $area[$j] .= '<textarea name="odg'.$j.$k.'" rows="3"'.$requiem.' maxlength="'.$chars.'" ></textarea><br/>';}}
    if(($min[$j])=="") {
    $area[$j] = '<textarea name="odg'.$j.$k.'" rows="3"'.$requiem.' maxlength="'.$chars.'" ></textarea>';}
    $addmore = '<input type="button" name="more" value="Add more" onClick="addmore('.$j.');">';
    $bla .= $j.') '.$pitanje[$j].'<br/>'.$area[$j].'<div id="inner'.$j.'"></div>'.$addmore.'<br/>';}}

echo $bla;
?>

FNCS.JS

var n = 1;
function addtxt() {
        var textarea = document.createElement("textarea");
        textarea.name = "question[" + n + "]";
        var required = document.createElement("input");
        required.type = "checkbox";
        required.name = "req[" + n + "]";
        var minimum = document.createElement("input");
        minimum.type = "text";
        minimum.name = "min[" + n + "]";
        var div = document.createElement("div");
        div.innerHTML = n + ". Question: " + "<br />" + textarea.outerHTML + "<br />" + "Required: " + required.outerHTML + "<br />" + "Min: " + minimum.outerHTML + "<br /><hr/><br/>";
        document.getElementById("brain1").appendChild(div);
        n++;
}

4 个答案:

答案 0 :(得分:1)

我做了同样的开发。

我在javascript中有一个全球化的计数器(cpt),每次重复增加1 我的变量像id = "foo_" + cpt一样重复
我为计数器<input type="hidden" id = "cpt">添加了一个隐藏字段,并为每次复制更改了其值
Php方面,我恢复了计数器,然后循环遍历所有重复的字段。

// For example
$cpt = $_POST['cpt'];
for ($i = 1; $i <= $cpt; $i++) {
    $foo[$i] = $_POST['foo_' . $i];
}

我希望它会有所帮助。

答案 1 :(得分:0)

您正在混合使用JavaScript和PHP。 PHP正在进行问题生成的一部分,然后JavaScript必须从它停止的地方开始。

这种方法的问题在于你会发现你最终会复制很多功能。

问题的答案我应该在这里添加什么?"odg" + $j + $k

相反,如果您开始这样做:

var questions = <?php echo json_encode($_POST["question"]);?>;

现在,您可以使用JavaScript提供所有问题数据。您可以将for循环从PHP移动到JavaScript,并在那里jk

答案 2 :(得分:0)

您需要做的是让$k能够传递到process.php
这是通过以下方式实现的:

<form action="process.php" method="post">
Title: <br/><input type="text" name="naslov" size="64" required ><br/>
Maximum characters: <br/><input type="text" name="chars" size="64"><br/><br/>
<div id="brain1"></div><br/>
<input id="numRows" type="hidden" name="numRows" value="1"/>
<input type="submit" name="submit" value="CONFIRM"><br/>
</form>

注意我添加了一个名为“numRows”的新<input>元素,该元素将通过POST传递给process.php。我给它任意默认value为1,你可以随意设置它。

现在,当用户点击“添加更多”按钮时,在fncs.js中执行以下操作: document.getElementById("numRows").value++;

最后,在你的process.php中,你需要读取这个值,如$ k:
<?php $k = isset($_POST['numRows']) ? urldecode($_POST['numRows']) : 1; ?>

在process.php中,您可以按照自己的意愿执行,然后使用该值$k

答案 3 :(得分:0)

您需要将最后一个文本区域值存储在隐藏变量中并始终递增

  • 第一步:开始设置隐藏变量的值和你的计数器 &#39; N&#39;相同

  • 第二步:在每个添加新文本区域的步骤中,
    用文本区域的新计数器值

  • 覆盖隐藏值

请记住,Textarea计数器应始终从隐藏值

中获取

我认为这可以帮助您解决问题