我在编写一段代码时遇到了一些麻烦,并试图让它按照我希望的方式工作。
我有一个不在我数据库中的数组
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?这就是我被困住的地方,我一直在谷歌上搜索答案。
答案 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);
});
答案 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>