Почему метод onClick внутри tr не вызывает функцию в foreach Laravel 5

Я хочу сделать что-то очень простое, то есть сделать каждую строку моей таблицы доступной для кликов, когда вы нажимаете на строку, она должна вызывать функцию для перенаправления вас на другую страницу, я сделал это с jQuery, но это дало мне определенные проблемы с моим bootstrap tables поэтому я хочу реализовать решение с js, но при нажатии на строку не вызывается функция

Это мое решение с jQuery, сначала, когда вы щелкаете строку, она вызывает функцию, которая отправляет href в форму для перенаправления на другую страницу

$(".clickable-row").click(function() {
                sendForm($(this).data("href"));
            });

function sendForm(projectId){
            console.info('works');
            $("#formProjectId").val(projectId);
            $("#Projectsform").submit();
        }

Вот мой foreach

 @foreach($projects

 as $project)
                    <tr class = "clickable-row">
                        <td>
                            <a href = "#" class = "sl-color" onclick = "sendForm('{{ $project->Project_Id }}')">{{ $project->Project_Id }}</a>
                        </td>
                        <td>
                            {{ $project->Project_Name }}
                        </td>
                    </tr>
                    @endforeach

Вот почему я пытался сделать с javascript, и он не работает

 @foreach($projects

 as $project)
                    <tr onclick = "sendForm('{{ $project->Project_Id }}')">
                        <td>
                            {{ $project->Project_Name }}
                        </td>
                    </tr>
                    @endforeach

Если у вас console.info(projectId) внутри sendForm, что вы получите?

Watercayman 30.03.2021 00:32

Стоит ли менять a на что-нибудь другое, например, на span?

ShanerM13 30.03.2021 00:33

@Watercayman Он ничего не печатает, я пытался распечатать простой console.info('hi'), но он не был напечатан, поэтому не вызывает функцию

Rinzler21 30.03.2021 00:36

Я не понимаю, почему вы вызываете функцию дважды. В последнем примере onclick в теге a-tag не требуется.

Engin 30.03.2021 00:38

@ ShanerM13 проблема не связана с тем, какие теги мне ставить, а в том, что функция onclick не вызывается или не работает

Rinzler21 30.03.2021 00:38

Потому что выше не работает. Я отвечу через секунду

Watercayman 30.03.2021 00:39

@enucar Я дважды звонил, чтобы пользователь увидел первый элемент строки, который можно щелкнуть с помощью a, но он перенаправит вас на ту же страницу, если вы щелкните по нему

Rinzler21 30.03.2021 00:40
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
33
3

Ответы 3

Я считаю, что проблема в том, что js не работает при первом вызове и, следовательно, никогда не переходит ко второму вызову. Итак, из исходного вызова:

$(".clickable-row").click(function() {
            sendForm($(this).data("href"));
    });

Он ищет поле данных, но не находит элемент данных в <tr>. Таким образом, он никогда не попадает во второй вызов той же функции.

Я думаю, что было бы полезно записать это в один оператор, например, html:

  <span class='clickable' data-href='whatever your href is' data-id='{{ $project->Project_Id }}'>{{ $project->Project_Id }}</span>

Затем вызовите его через событие щелчка в jquery:

$( document ).ready(function() {
  $('.clickable').on('click', function(){   
    var id = $(this).data( "id" );
    // same for href
   // then perform your actions
 });
});

В JS вы можете сделать то же самое, если у вас просто событие onclick:

function sendForm(projectId){
    document.getElementById("formProjectId").value = projectId;
    document.Projectsform.submit();
}

Вам необходимо убедиться, что name формы - это Projectsform, или:

document.getElementById("Projectsform").submit();

Извините, я думаю, что здесь произошло недоразумение, я хочу, чтобы это работало. <tr onclick = "sendForm('{{ $project->Project_Id }}')">, вызов, который находится внутри тега a, работает идеально. Решение, которое вы мне дали, очень похоже на то, что я сделал с jQuery.

Rinzler21 30.03.2021 00:51

Не беспокойтесь - так что - HTML с <tr class = "clickable-row"> больше не входит в ваше решение, это просто <tr onclick = "sendForm('{{ $project->Project_Id }}')">, и это не работает?

Watercayman 30.03.2021 00:56

@ Да, именно это я хочу <tr onclick = "sendForm('{{ $project->Project_Id }}')">, опубликуйте решение с помощью js, а затем я принимаю ваш ответ

Rinzler21 30.03.2021 01:02

Если вы удалили первый вызов из класса clickable-row, и вы просто используете onclick из <tr>, если вы не можете console.info(projectId), есть еще одна проблема, это не код здесь. Сообщает ли консоль браузера о каких-либо ошибках, происходящих где-либо еще на странице, прежде чем она перейдет к этой функции?

Watercayman 30.03.2021 01:28

Я добавил решение в JS, но не уверен, понял ли я, возникла ли у вас другая проблема или он успешно сбрасывал переменную для вас.

Watercayman 30.03.2021 01:36

Я решил увидеть свой ответ

Rinzler21 30.03.2021 01:56

мм Странно, вам следует удалить тег, потому что вы улавливаете щелчок родительского тега. проверьте мою ручку.

https://codepen.io/ezequiel9/pen/MWJjGeq

$("body").on('click', '.clickable-row', function(e) {
  e.preventDefault();
  sendForm($(this).data("href"));
});

function sendForm(projectId){
  alert('clicked');
  console.info('works');
  $("#formProjectId").val(projectId);
  $("#Projectsform").submit();
}

Извините, я думаю, что здесь произошло недоразумение, я хочу, чтобы это работало. <tr onclick = "sendForm('{{ $project->Project_Id }}')">, вызов, который находится внутри тега a, работает идеально. Решение, которое вы мне дали, очень похоже на то, что я сделал с jQuery. Я хочу, чтобы родительский тег работал, и он не работает.

Rinzler21 30.03.2021 00:53

Вот как я решил, Я добавил функцию события, поэтому, если вы щелкнете по любому элементу строки, она вызовет функцию sendForm

document.onclick = function(e){
            if (e.target.id == 'clickable-row'){
                sendForm(e.target.getAttribute("data-target"));
            }
        
        }

Вот как теперь выглядит мой HTML-код: data-target предназначен для указания переменных, которые я хочу передать функции, и идентификатора для проверки элемента, по которому был выполнен щелчок.

@foreach($projects

 as $project)
                    <tr>
                        <td id = "clickable-row" data-target = "{{ $project->Project_Id }}">
                            <a href = "#" class = "sl-color" onclick = "sendForm('{{ $project->Project_Id }}')">{{ $project->Project_Id }}</a>
                        </td>
                        <td id = "clickable-row" data-target = "{{ $project->Project_Id }}">
                            {{ $project->Project_Name }}
                        </td>
                    </tr>
                    @endforeach

Это не будет работать (действительный HTML), если ids пишут поверх друг друга. Я предлагаю использовать исходный ответ, который у меня был с jquery (или JS с полным документом, как я написал) - он делает то же самое, но чисто.

Watercayman 30.03.2021 02:32

Ваш by почему-то не работает для меня должным образом, возможно, это должно быть с чем-то еще в коде, мой решил все мои проблемы, я знаю, что это не самое чистое решение

Rinzler21 30.03.2021 02:53

Другие вопросы по теме

DOMException: не удалось выполнить replaceState в «Истории» при использовании form.post по инерции
Как справиться с ошибкой дублирования столбцов при миграции Laravel после ручного добавления столбцов в производство?
Приложение Laravel CRUD, возвращающее ноль для отдельных элементов
Как хешировать пароль в валидаторе запросов?
Могу ли я изменить столбец типа в полиморфном отношении Laravel?
Правило проверки Laravel UpdateUserRequest с идентификатором пользователя
Laravel PlainTextToken имеет значение NULL при перечислении токенов
Почему мой запрос Laravel Eloquent возвращает записи с неправильными датами после применения соединения с дополнительными фильтрами, несмотря на начальные ограничения по дате?
Laravel 11: ограничение скорости выполнения заданий, которое не должно превышать ограничение скорости внешнего API
Как изменить базу запросов Laravel Filament Eloquent Query по условию?