我有一个用于制作问卷的应用程序。用户有index.php页面,他们在那里创建问题并选择最少的答案数,然后他们有process.php页面,他们可以输入答案或添加更多答案。
问题:当用户点击add more button
时,它会创建特定问题的文本区域,但名称错误。添加更多按钮应添加textarea并根据定义的textareas的最小值更改其名称。所以,如果你是前任。在问题2中有4个定义的textareas,下一个textareas应该像odg25,odg26,odg27,odg28等......
问题在于变量$ k(process.php) - 因为它没有在addmore函数中定义,但我不知道如何以某种方式通过这部分代码来实现它。
的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++;
}
答案 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,并在那里j
和k
。
答案 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计数器应始终从隐藏值
中获取我认为这可以帮助您解决问题