2017-06-15 192 views
0

所以,这里是一件事 - 我有一个注释部分,生成一个foreach循环,所有的注释都有按钮,这会导致启动模式以textarea打开输入回复评论。 问题是我只能从页面上的第一条评论中获得一个值,我试图用JS ike获得这个值 - var comment = $('#textarea_id').val();并且只使用PHP($ _POST),但它仅适用于第一条评论。此外,它试图为每个textarea,独特的名称等,但它也没有帮助。 这是给你直观的了解一些代码(拜托,我使用Smarty的引擎通知,但我认为这是同样的逻辑常规PHP foreach循环,所以不介意吧):从foreach循环中的textarea获取值

{foreach from=$comments item=row} 
Here is the body of comment and button to trigger reply modal 
And this is reply modal with textarea in it: 
      <!-- Reply Modal --> 
      <div class="modal fade" id="{$row.id}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
       <div class="modal-dialog"> 
        <div class="modal-content" style="word-wrap:break-word;"> 
         <div class="modal-header love-modal"> 
          <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
          <h3 class="modal-title" id="myModalLabel">Reply to <a href="{$abslink}profile/{$row.username}">{$row.username}</a></h3> 
         </div> 
         <div class="modal-body"> 
          <form class="form-horizontal" role="form" action="#" method="post"> 
          <textarea class="form-control" id="someidfortextarea" name="" rows="8" maxlength="5550"></textarea> 
          </form> 
         </div> 
         <div class="modal-footer"> 
          <button class="reply btn btn-success" name="submit" type="submit">Post</button> 
          <button type="button" class="btn btn-success" data-dismiss="modal">Close</button> 
         </div> 
        </div> 
       </div> 
      </div> 
      {/foreach} 

所以,主要问题是 - 如何从循环(通过php或javascript)textarea获取文本?我会很高兴看到任何建议或建议!非常感谢你!

+0

你也可以发布你的JavaScript。 – VK321

+0

现在我只是为了调试目的而将值记录到浏览器的控制台,但即使它是关于我的JS代码,它可能与我尝试获取值的方式有关。 '$(函数(){ \t $( “回复”。)点击(函数(){ \t \t VAR评论= $( '#注释')VAL(); \t \t VAR topic_id = $( '#topic_id')。val(); //从隐藏的topic_id字段获取页面ID \t \t var dataFields = {'comment':comment,'topic_id':topic_id}; //准备数据字符串 console。 log(comment); console.log(dataFields); \t}); }); ' –

回答

2

您需要共享标识符才能将按钮与匹配的textarea相关联。 $row.id看起来很不错。

声明:未经测试的代码,因此您可能需要花费一些时间才能使其正常工作。

{foreach from=$comments item=row} 
    ... 
    <textarea class="form-control" id="textarea_{$row.id}" name="" rows="8" maxlength="5550"></textarea> 
    ... 
    <button id="submit_post_{$row.id}" class="reply btn btn-success" name="submit" type="submit">Post</button> 
    ... 
{/foreach} 

然后,在JavaScript,你可以涉及回:

$('button.reply').click(function() { 
    var button_id = $(this).prop('id'); 
    var row_id = button_id.replace('submit_post_', ''); 
    var textarea_id = '#textarea_' + row_id; 

    var comment = $(textarea_id).val(); 

    // now send {comment} to the server using ajax 
}); 

我敢肯定有更有效的方式来做到这一点,也许你可以在按钮上使用data属性,这样你不必串行替换按钮的id上的位。这只是一个普遍的想法。

+0

嗯,说实话我没有尝试为按钮设置一个唯一的ID,谢谢你的提示。我觉得我们很接近,但现在我得到一个错误:'未捕获的类型错误:无法读取'取代'未定义的属性我会继续工作,我相信它几乎已经解决了 –

+0

根据jQuery版本,您可能需要使用'attr'而不是'prop'来从按钮中获取id。 – rickdenhaan

+0

这是jQuery v3.1.1我现在试着'attr' –