2017-06-15 9 views
0

ここには、ここには、foreachループで生成されたコメントセクションがあります。すべてのコメントにボタンがクリックされています。これはブートストラップモーダルをtextareaで開きます返信コメントを入力します。 問題は、ページの最初のコメントからのみ値を取得でき、JS ike this-var comment = $('#textarea_id').val();で値を取得しようとしましたが、PHP($ _POST)のみを使用していますが、最初のコメントに対してのみ機能します。また、すべてのテキストエリア、固有の名前などに一意のIDを入れようとしましたが、どちらも役に立ちません。ここ はあなたの視覚的な理解(私はSmartyのエンジンを使用していますが、私はそれが通常のPHPのforeachループと同じロジックだと思うので、それを気にしないでください、予告)のためのいくつかのコードです:foreachループの内部にあるテキストエリアから値を取得する

{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} 

ので、主な質問は - foreachループ内のテキストエリアからテキストを取得する方法(PHPまたはJavaScriptによって)?私は本当にアドバイスや提案を見てうれしいです!どうもありがとうございました!

+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':コメント 'topic_id':topic_id}; //データ文字列を準備する コンソール。ログ(コメント); console.log(データフィールド); \t}); }); ' –

答えて

2

ボタンを一致するテキストエリアに関連付けるには、共有識別子が必要です。 $row.idは良いマッチのようです。

免責事項:テストされていないコードなので、正常に動作するには少し補う必要があります。あなたのJavaScriptで次に

{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} 

、あなたはそれをバック関連付けることができます。

$('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を設定しようとしていませんでした。そのヒントのおかげで。 'Uncaught TypeError:プロパティを読み取ることができません 'undefinedの' replace 'を実行し続けます。ほとんど解決されていると確信しています –

+0

jQueryのバージョンによっては、ボタンからIDを取得するために 'prop'の代わりに' attr'を使用することです。 – rickdenhaan

+0

jQuery v3.1.1今私は 'attr'を試してみます –

関連する問題