我有一个制作问卷的应用程序。用户有索引.php页面,他们在其中创建问题并选择最少数量的答案,然后他们有进程.php页面,他们可以在其中输入答案或添加更多答案。
问题:当用户单击add more button
时,它会创建特定问题的文本区域,但名称错误。"添加更多"按钮应添加一个文本区域,并根据定义的文本区域的最小值更改其名称。因此,例如,如果您在问题 2 中有 4 个定义的文本区域,则下一个文本区域应该像 odg25、odg26、odg27、odg28 等......
问题出在变量$k(进程.php)中 - 因为它没有在 addmore 函数中定义,但我不知道如何以某种方式传入这部分代码来实现它。
这是测试环节
指数。.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>
过程。.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++;
}
我做了同样的开发。
我在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];
}
我希望它会有所帮助。
你正在混合JavaScript和PHP。PHP 正在做问题生成的一部分,然后 JavaScript 必须从它停止的地方继续。
这种方法的问题在于,您会发现最终会复制许多功能。
答案是我应该在这里添加什么???是"odg" + $j + $k
相反,如果您从执行以下操作开始:
var questions = <?php echo json_encode($_POST["question"]);?>;
您现在拥有 JavaScript 中的所有问题数据。您可以将for
循环从PHP移动到JavaScript,并在那里j
和k
。
你要做的是让$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; ?>
在过程中.php您可以随心所欲地做,然后,使用该值$k
。
您需要将最后一个文本区域值存储在隐藏变量中,并始终递增该值
-
第一步:开始时设置隐藏变量和计数器的值'n' 相同
-
第二步:在添加新文本区域的每一步,
用文本区域的新计数器值覆盖隐藏值
请记住,文本区域计数器应始终从隐藏值中获取
我认为这可以帮助您解决问题