Почему элемент кнопки не работает при использовании внутри внутреннего представления цикла foreach в laravel?

#javascript #laravel

Вопрос:

Мне нужен график внутри карточки с записями из базы данных.

Каждая карта содержит button элемент, который при нажатии обновляет значение для конкретного идентификатора карты. Значение будет активировано в результате события.

Контроллер:

 class SampleController extends Controller
{
  public function index()
    {

        $users=User::all();

        return view('progress', ['users'=> $users]);

    }
 
 @foreach($users as $user)
                <div class="card">
                    <div class="card-title">
                        <div class="caption">
                             {{ $user['name'] }}
                        </div>

                        <div class="actions">
                            <div class="btn">
                                <button id="ref">Refresh</button>
                            </div>
                        </div>
                    </div>
                    <div class="card-body" id="{{ $user['id'] }}">
                        <center>
                            <div style=" display:inline; width: 200px; height: 200px;">
                                <input
                                    class="graph"
                                    data-max="{{ $user['goal'] }}"
                                    value= ""
                                />
                            </div>
                        </center>
                    </div>
                </div>
                @endforeach
            </div>
 

Сценарий::

  var pusher = new Pusher('xxxxxxx', {
        cluster: 'ap3',
        encrypted: true
      });


   // Subscribe to the channel we specified in our Laravel Event
        var channel = pusher.subscribe('my-channel');
              channel.bind('App\Events\myEvent', function(data){
              target = data.id;
              value = data.value;
        //Refresh button

         $('#ref').click(function(){
             $.ajax({url: '/api/getId/'   target,
                 success: function(){
                 alert('THe UI is updated'   value);
             $(target).block({
                        message: 'processing',
                        timeout: 20000,

                    });
             $(target).unblock();
              
                }
            });
         });
 

Когда я передаю значение через tinker, как показано ниже,

 event(new AppEventsmyEvent('3',40));

 

Я мог видеть, что конкретная Id(3) информация обновляется с учетом значения 40 .

Цель обновления состоит в том ,что карта должна быть заблокирована на 20 секунд, между тем, если я передам значение через событие для конкретного идентификатора, оно разблокирует карту и обновит карту новым значением.

Проблема в том ,что если у меня 10 карт, работает только кнопка обновления на первой карте, кнопка обновления на остальных картах не работает.

Как я могу заставить кнопку обновления работать на всех картах?

Кто-нибудь может, пожалуйста, помочь? Большое спасибо.

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

1. идентификатор должен быть уникальным для каждого элемента .попробуйте добавить имя класса и изменить $(документ).on («щелчок»,». имя класса», функция(){

2. @Джон Лобо, Это работает! Но если я изменю значение для карты с идентификатором:1, оно обновит значение для идентификатора:1 после нажатия кнопки обновить. But, If i Press the refresh button for the ID:2, It takes the same Value which I have given to the ID: 1 . Этого не должно быть, если я есть NAN в значении, то после нажатия кнопки обновить NAN должно быть значение после нажатия кнопки Обновить. Как я мог это сделать? Не могли бы вы, пожалуйста, помочь?

3. потому что вы получаете доступ к значению из цели onclick = data.id; значение = данные.значение; . поэтому лучше установить идентификатор на кнопку, подобную этой <идентификатор кнопки=»ref» идентификатор данных-» {{$user[‘id’] }}»>Обновить<идентификатор кнопки=»ref» идентификатор данных -» {{$user[‘id’] }}»></кнопка>, чтобы вы могли войти внутрь onclick $(это).attr(«идентификатор данных»)

4. @Джон Лобо, Извини, что я тебя не понял. Если я установлю <идентификатор кнопки=»ref» идентификатор данных-» {{$user[‘id’] }}»>Обновить<идентификатор кнопки=»ref» идентификатор данных -» {{$user[‘id’] }}»></кнопка>, то как передать идентификатор данных в приведенном ниже сценарии? , $(документ).on («нажмите»,». ref», функция(){ $.ajax({url:’/api/getId/’ цель, успех: функция(){ предупреждение («Пользовательский интерфейс заблокирован» цель); var tar = document.getElementById(цель); $(tar).блок({ сообщение: «обработка», время ожидания: 20000 }); } });

5. <идентификатор кнопки=»ref» класс=»ref» идентификатор данных-» {{$user[‘id’] }}»>Обновить<идентификатор кнопки=»ref» класс=»ref» идентификатор данных -» {{$user[‘id’] }}»></кнопка> $(‘.ref’).нажмите(функция(){ var цель=$(это).attr(‘идентификатор данных’) $.ajax({url: ‘/api/getId/’ цель, успех: функция(){ предупреждение(‘THe Пользовательский интерфейс обновлен’ значение); $(цель). заблокировать({ сообщение: «обработка», время ожидания: 20000, }); $(цель).разблокировать(); } }); });