【问题标题】:Display <textarea> on each content that is being generated dynamically在动态生成的每个内容上显示 <textarea>
【发布时间】:2019-01-16 08:28:05
【问题描述】:

我在动态生成的页面上列出了问题和选项(多项选择题)。我想将此提供给内容管理团队,如果他们发现任何有问题的错误,他们可以单击“注释”,然后会为该问题打开一个文本区域,他们可以编写该注释。所以现在如果我点击一个问题,文本区域会打开,但是如果我点击下一个问题的“注释”选项,文本区域会在前一个问题的部分打开。如何纠正这个问题,我环顾四周,但没有任何线索。让我知道我哪里出错了。

<?php if($row['section'] == 1) {?>  
<ul class="list-group">
<li class="list-group-item active">
<div class="radio noMargin" id="<?php echo $sectionOne ; ?>info"><?php echo $no ; ?> <span class="glyphicon glyphicon-arrow-right"></span></div><?php echo "<font color='pink'>Ques ID :[".$row['id']."]</font>";?><div class="question"><?php echo $row['question'] ; ?></div>
<div style="float:right; margin-top:-20px;">
 <div onclick= "myFunction()"> <font color='yellow'>Notes</font></div>  


Marks:<?php echo $row['marks'] ; ?></div></li>
<?php          
echo '<input type="hidden" name="question[]" id="questionId" value="'.$row['id'].'">';
echo '<input type="hidden" name="attempt" value="'.$attemptCount.'">';
echo '<input type="hidden" name="unit_id" value="'.$unit_id.'">';
echo '<input type="hidden" name="chapter_id" value="'.$chapter_id.'">';

$questionId     =   $row['id'] ;  

$sqO =$db->query("SELECT id, options from  tbl_options_mock_question WHERE question_id = ".$questionId."");
while($rowO=mysql_fetch_array($sqO))
{
?>  
    <li class="list-group-item wrp_radio">
      <div class="radio noMargin">
        <label>
          <input disabled type="radio" class="checkedInfo" alt="<?php echo $no ; ?>"  name="optionAns<?php echo $i ; ?>"  value="<?php echo $rowO['id'] ; ?>">
          <?php echo $rowO['options'] ; ?></label>
      </div>
    </li>

<?php } ?>

<script type="text/javascript">
function myFunction() {
  document.getElementById("demo").innerHTML += "<div class='comment_form'><form action='#' method='post'><textarea class='span10' name='Comment' rows='6'></textarea><br><input class='btn btn-primary' type='submit' value='Reply'></form></div>";
}  
</script>

</ul>
<div id="demo"></div>         
<?php $i++;$no++; ?>

<?php } ?> 

【问题讨论】:

  • 很难用所有的 php 象形文字和使用 innerHTML= 来分辨,而不是仅仅将 html 添加到页面并显示/隐藏它 - 但它看起来像你的 &lt;div id=demo 代码驻留在里面 一个循环 - 因此您将拥有多个具有相同 id 的 div - 当您尝试按 id 查找一个时,它只会得到第一个。
  • 此外,+= 将在添加时清除前一个文本区域的任何内容,因为代码不会复制表单的内容。

标签: php jquery html mysql


【解决方案1】:

由于那里添加了jQuery标签,所以我将给出一个jquery解决方案:-

1.将&lt;div id="demo"&gt;&lt;/div&gt;转换为&lt;div class="demo"&gt;&lt;/div&gt;并放入&lt;ul&gt;&lt;/ul&gt;

2.从 div 中删除 onclick 并在该 div 上添加类 click_notes

3.添加jquery库并使用以下代码

$(document).ready(function(){
 $('.click_notes').on('click',function(){
   $('.comment_form').hide(); //hide show form
   $(this).closest('ul').find('.demo').html("<div class='comment_form'><form action='#' method='post'><textarea class='span10' name='Comment' rows='6'></textarea><br><input class='btn btn-primary' type='submit' value='Reply'></form></div>");
 });
});

示例 sn-p:-

$(document).ready(function(){
 $('.click_notes').on('click',function(){
   $('.comment_form').hide();//hide show form
   $(this).closest('ul').find('.demo').html("<div class='comment_form'><form action='#' method='post'><textarea class='span10' name='Comment' rows='6'></textarea><br><input class='btn btn-primary' type='submit' value='Reply'></form></div>");
 });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="list-group">
  <li class="list-group-item active">Ques ID :1<div class="question">Q1</div><div style="float:right; margin-top:-20px;"><div class="click_notes"> <font color='yellow'>Notes</font></div>Marks:5</div>
  </li>
  <li class="list-group-item wrp_radio">
    <div class="radio noMargin"><label><input disabled type="radio" class="checkedInfo" alt="1"  name="optionAns1"  value="1">1</label></div>
  </li>
  <li class="list-group-item wrp_radio">
    <div class="radio noMargin"><label><input disabled type="radio" class="checkedInfo" alt="2"  name="optionAns2"  value="1">2</label></div>
  </li>
  <li class="list-group-item wrp_radio">
    <div class="radio noMargin"><label><input disabled type="radio" class="checkedInfo" alt="3"  name="optionAns3"  value="1">3</label></div>
  </li>
  <li class="list-group-item wrp_radio">
    <div class="radio noMargin"><label><input disabled type="radio" class="checkedInfo" alt="4"  name="optionAns4"  value="1">4</label></div>
  </li>
  <div class="demo"></div>
</ul>
<ul class="list-group">
  <li class="list-group-item active">Ques ID :2<div class="question">Q2</div><div style="float:right; margin-top:-20px;"><div class="click_notes"> <font color='yellow'>Notes</font></div>Marks:5</div>
  </li>
  <li class="list-group-item wrp_radio">
    <div class="radio noMargin"><label><input disabled type="radio" class="checkedInfo" alt="1"  name="optionAns1"  value="1">1</label></div>
  </li>
  <li class="list-group-item wrp_radio">
    <div class="radio noMargin"><label><input disabled type="radio" class="checkedInfo" alt="2"  name="optionAns2"  value="1">2</label></div>
  </li>
  <li class="list-group-item wrp_radio">
    <div class="radio noMargin"><label><input disabled type="radio" class="checkedInfo" alt="3"  name="optionAns3"  value="1">3</label></div>
  </li>
  <li class="list-group-item wrp_radio">
    <div class="radio noMargin"><label><input disabled type="radio" class="checkedInfo" alt="4"  name="optionAns4"  value="1">4</label></div>
  </li>
  <div class="demo"></div>
</ul>

【讨论】:

  • 谢谢伙计。这就是我想要的。它按我的意愿工作。非常感谢 。继续努力。
  • 是的,最后一件事,这个文本区域可以切换为隐藏和显示吗??
  • @Ansh 是的,我也为此添加了代码。检查我的答案
  • 我试过这个。 ` $('.comment_form').hide();` 这部分。但不幸的是没有工作
  • 即使对于上面的代码 sn-p 试验,它也无法正常工作。还能做点别的吗??
【解决方案2】:

这部分:

<div id="demo"></div>         
<?php $i++;$no++; ?>
<?php } ?> 

将使用 id=demo 创建多个 div,因此当您使用 document.getElementById("demo") 时,它只会获取第一个。

使用类而不是 id,然后使用相对导航来获取相关的。

保留onclick= 并使用 jquery(根据标签),这将变为:

<div onclick= "myFunction(this)">

function myFunction(el) {
    $(el).closest(".list-group-item").find(".demo").html("<div class='comment_form...

【讨论】:

  • 谢谢。我对此有疑问。function myFunction(el) { $(el).closest(".list-group-item").find(".demo").html .... el 的值是多少
  • el 将是从onclick &lt;div onclick= "myFunction(this)"&gt; 传入的this 的值
  • 使用 jquery 时,您通常会将事件与标记分开连接,因此不需要它,因为 this 已经定义了。由于您的问题被标记为 jquery 但实际上没有任何 jquery 我将更改保持在最低限度。
猜你喜欢
  • 2021-04-15
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 2012-08-24
  • 2020-01-14
相关资源
最近更新 更多