Я хочу сделать что-то очень простое, то есть сделать каждую строку моей таблицы доступной для кликов, когда вы нажимаете на строку, она должна вызывать функцию для перенаправления вас на другую страницу, я сделал это с 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
Стоит ли менять a на что-нибудь другое, например, на span?
@Watercayman Он ничего не печатает, я пытался распечатать простой console.info('hi'), но он не был напечатан, поэтому не вызывает функцию
Я не понимаю, почему вы вызываете функцию дважды. В последнем примере onclick в теге a-tag не требуется.
@ ShanerM13 проблема не связана с тем, какие теги мне ставить, а в том, что функция onclick не вызывается или не работает
Потому что выше не работает. Я отвечу через секунду
@enucar Я дважды звонил, чтобы пользователь увидел первый элемент строки, который можно щелкнуть с помощью a, но он перенаправит вас на ту же страницу, если вы щелкните по нему



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я считаю, что проблема в том, что 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.
Не беспокойтесь - так что - HTML с <tr class = "clickable-row"> больше не входит в ваше решение, это просто <tr onclick = "sendForm('{{ $project->Project_Id }}')">, и это не работает?
@ Да, именно это я хочу <tr onclick = "sendForm('{{ $project->Project_Id }}')">, опубликуйте решение с помощью js, а затем я принимаю ваш ответ
Если вы удалили первый вызов из класса clickable-row, и вы просто используете onclick из <tr>, если вы не можете console.info(projectId), есть еще одна проблема, это не код здесь. Сообщает ли консоль браузера о каких-либо ошибках, происходящих где-либо еще на странице, прежде чем она перейдет к этой функции?
Я добавил решение в JS, но не уверен, понял ли я, возникла ли у вас другая проблема или он успешно сбрасывал переменную для вас.
Я решил увидеть свой ответ
мм Странно, вам следует удалить тег, потому что вы улавливаете щелчок родительского тега. проверьте мою ручку.
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. Я хочу, чтобы родительский тег работал, и он не работает.
Вот как я решил,
Я добавил функцию события, поэтому, если вы щелкнете по любому элементу строки, она вызовет функцию 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 с полным документом, как я написал) - он делает то же самое, но чисто.
Ваш by почему-то не работает для меня должным образом, возможно, это должно быть с чем-то еще в коде, мой решил все мои проблемы, я знаю, что это не самое чистое решение
Если у вас
console.info(projectId)внутриsendForm, что вы получите?