【问题标题】:Declare a JavaScript variable that will hold place for php variable声明一个用于 php 变量的 JavaScript 变量
【发布时间】:2014-03-31 13:36:20
【问题描述】:

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

问题:当用户点击add more button 时,它会创建特定问题的文本区域,但名称错误。添加更多按钮应添加一个文本区域并根据定义的最小文本区域更改其名称。所以如果你是前任。有 4 个已定义的 textareas 问题2,下一个 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++;
}

【问题讨论】:

    标签: javascript php html


    【解决方案1】:

    我做了同样的开发。

    我在 javascript 中有一个全球化计数器 (cpt),每次重复时递增 1 我的变量像这样重复id = "foo_" + cpt

    我为计数器 &lt;input type="hidden" id = "cpt"&gt; 添加了一个隐藏字段,并且每次复制都更改了它的值。

    在 PHP 方面,我恢复了计数器,然后循环遍历所有重复的字段。

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

    我希望它会有所帮助。

    【讨论】:

      【解决方案2】:

      您正在混合使用 JavaScript 和 PHP。 PHP 正在生成问题的某些部分,然后 JavaScript 必须从中断的地方继续。

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

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

      如果你开始做:

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

      您现在可以在 JavaScript 中使用所有问题数据。您可以将 for 循环从 PHP 移至 JavaScript,并在其中设置 jk

      【讨论】:

        【解决方案3】:

        您需要做的是使$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”的新&lt;input&gt; 元素,它将通过POST 传递给process.php。我给它一个任意的默认value 1,你可以随意设置它。

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

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

        在 process.php 中,你可以随心所欲地使用该值$k

        【讨论】:

          【解决方案4】:

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

          • 第一步:在开始时设置隐藏变量和计数器的值 'n' 一样

          • 第二步:在您添加新文本区域的每一步,
            用文本区域的新计数器值覆盖隐藏值

          记住 Textarea 计数器应该总是从隐藏值中获取

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多