使用PHP数组数据创建和操作HTML表单

时间:2012-02-16 18:08:48

标签: php javascript jquery forms

我在编写一段代码时遇到了一些麻烦,并试图让它按照我希望的方式工作。

我有一个不在我数据库中的数组

Array ( [0] => Array ( [id] => 1 [title] => Test 1 [comment] => Test 1 ) [1] => Array ( [id] => 2 [title] => Test 2 [comment] => This is the second test!! ) ) 

每行数据都有一个id,title和comment。

我有这个下拉菜单

<select name="Selection" id="Selection">
    <?php
      echo "<option selected='selected' value='Default'>Please Make a Selection</option>";
         foreach($array as $row){
            echo "<option>" . htmlentities($row['title']) . "</option>";
         }

    ?>
</select>

我试图得到它,以便当用户选择标题时,与该标题相关联的评论会进入下面的评论文本框。

<p id="commentContainer">
<label for="comment">Comment</label>
<textarea name='comment' id='comment' cols="40" rows="5"><? echo htmlentities($array["comment"]); ?></textarea>
</p>

我也有这个Javascript

<script type="text/javascript">

$(document).ready(function() {
    $('#selection').change(function(){
        var commentId = $(this).val();
        $('#comment').val(commentId);
    })
});

</script>

这将获取注释文本框下拉列表中所选内容的值。

我如何在评论文本框中获得与标题相关的评论?我是否必须将下拉选项的值设置为ID?这就是我被困住的地方,我一直在谷歌上搜索答案。

5 个答案:

答案 0 :(得分:2)

这应该可以解决问题。迭代你的数组两次输出所有注释和所有选择框,然后将它们全部隐藏起来。

<select name="selection" id="selection">
    <?php
      echo "<option selected='selected' value='Default'>Please Make a Selection</option>";
         foreach($array as $row){
            echo "<option value=\"$row[id]\">" . htmlentities($row['title']) . "</option>";
         }

    ?>
</select>

<?php
    foreach( $array as $row ) {
?>
<p id="commentContainer_<?php echo $row['id']; ?>" class="comment-container">
<label for="comment">Comment</label>
<textarea name="comment" id="comment" cols="40" rows="5"><? echo htmlspecialchars($array["comment"]); ?></textarea>
</p>
<?php 
    }
?>

<script type="text/javascript">

$(document).ready(function() {
    $('#selection').change(function(){
        var commentId = $(this).val();
        $('.comment-container').hide();
        $('#commentContainer_' + commentId).show();
    })
});

</script>

答案 1 :(得分:1)

您永远不会在选项上设置值:

echo "<option>" . htmlentities($row['title']) . "</option>";

应该是

echo "<option value=\"{$row['id']}\">" . htmlentities($row['title']) . "</option>";

然后你应该有一个数组,其中id为关键,注释为Javascript中的值:

//Generate this with PHP or an AJAX call
var comments = new Array();
comments[1] = "Some comment for id 1"; //Where 1 is the value of the comment id

Lke this:

<script type="text/javascript">

$(document).ready(function() {
    var comments = new Array();
    <?php foreach ($array as $row) {?>
    echo "comments[" . $row['id'] . "] = \"" . $row['comment'] . "\";";
    <?php } ?>
});

</script>

答案 2 :(得分:1)

似乎JavaScript是此解决方案的必备条件。看看你是否可以采用这种方法:

第1步: json_encode()您的数组数据,以便在JavaScript中使用它。假设它最终看起来像这样:

var selectionData = {
    "1": {
        "title": "Test 1",
        "comment": "Comment 1"
    },
    "2": {
        "title": "Test 2",
        "comment": "Comment 2"
    }
};

第2步:使用此对象填充选择:

$.each(selectionData, function(id, data) {
    $("<option/>").attr({
        "value": id
    }).text(data.title).appendTo("#Selection");
});

第3步:使用此对象更新评论框:

$("#Selection").change(function() {
    var id = $(this).val();
    $('#comment').val(selectionData[id].comment);
});

Demo here

答案 3 :(得分:0)

您需要为选项标记

添加值
 echo "<option value='$title'>" . htmlentities($row['title']) . "</option>";

并使用ID代替标题。

答案 4 :(得分:0)

第一步是为选项添加值。这可以通过使用value属性来完成。

echo("<option value='" . $uniqueIdentifierOfSelection. "'>");

从那里,您需要获取此值并从数组中获取要显示的好注释。

<script type="text/javascript">

$(document).ready(function() {
    $('#selection').change(function(){
        var id = $(this).val();
        $('#comment').val(myArray[id]);
    })
});

</script>