Показывать / скрывать элементы, сгенерированные в цикле foreach

#javascript #php #jquery #show-hide #laravel-blade

#javascript #php #jquery #показать-скрыть #laravel-blade

Вопрос:

Я просматриваю записи форума и рядом с каждой из них я разместил кнопку, чтобы показать или скрыть форму ответа на комментарий, я заставил это работать, используя простой JS-скрипт. Однако, поскольку сценарий замкнут, он работает только для верхнего. предположительно, потому что он не может идентифицировать каждый элемент с помощью идентификатора, потому что идентификатор не будет уникальным (и класс заставил бы все их показывать / скрывать). Я думал добавить что-то вроде {{$comment-> id}} к идентификатору, чтобы он был уникальным, но тогда я не смогу использовать JS-скрипт? могу ли я?

Ниже приведен соответствующий код:

 @extends('layout')

@section('head')
<script>
$(document).ready(function(){
    $("#showhidereply").click(function(){
        $("#replycomment").toggle();
    });
});
</script>
 @stop

@section('content')
    ...
    <!-- Comments -->
          @foreach ($post->comments as $comment)
              <span class="pull-right">
                  <div class=" btn-group">
                    <button class="btn btn">
                        <span class="glyphicon glyphicon-picture"></span> Owner's Name Here
                    </button>
                    <button class="btn btn btn-primary" id="showhidereply">
                      <span class="fa fa-reply"></span>
                    </button>
                  </div>
              </span>
              <p>{{ $comment->body }}</p>
            </div>

    <form method="POST" action="/forum/{{ $post->id }}/comments/{{ $comment->id }}/newresponse" id="replycomment">
                    <input type="hidden" name="_token" value="{{ csrf_token() }}">
                    <div class="input-group" style="padding-top: 5px;">
                      <input type="text" name="body" class="form-control"></input>
                      <div class="input-group-btn">
                        <button type="submit" class="btn btn-primary">Reply to Comment</button>
                      </div>
                    </div>
                  </form>
                  </div>
            </div>
            </div>
        </div>
        </div>
          @endforeach
          </div>
</div>
@stop
  

У меня был кто-то, кто предложил изменить на:

Кнопка

 <button class="btn btn btn-primary" class="showhidereply" data-id="{{ $comment->id }}">
    <span class="fa fa-reply"></span>
</button>
  

Форма

 <form method="POST" action="/forum/{{ $post->id }}/comments/{{ $comment->id }}/newresponse" id="replycomment-{{ $comment->id }}">
  

Скрипт

 <script>
$(document).ready(function(){
    // change the selector to use a class
    $(".showhidereply").click(function(){
        // this will query for the clicked toggle
        var $toggle = $(this); 

        // build the target form id
        var id = "#replycomment-"   $toggle.data('id'); 

        $( id ).toggle();
    });
});
</script>
  

Но это все еще не работает, но все элементы теперь уникальны.

Большое спасибо!

Комментарии:

1. Вы могли бы использовать индекс типа follow: @foreach ($post->comments as $key => $comment) //Write your code using $key in id @endforeach

Ответ №1:

Попробуйте использовать это,

 <button class="btn btn btn-primary" data-id="{{ $comment->id }}" onclick="showHide('replycomment-{{ $comment->id }}');">
    <span class="fa fa-reply"></span>
</button>

//javascript code
<script>
    function showHide(id){
        $("#" id).toggle();
    }
</script>