如何 select 没有 id 的数据表中的表单
how to select a form inside a datatables without an id
我把这个表格写在 table 和 html laravel 集体中:
@foreach($patients as $patient)
<tr>
{{Form::open(['route' => 'patientDetails'])}}
{{Form::hidden('patient',json_encode($patient))}}
{{Form::close()}}
<td>{{$patient['display']}}</td>
.......
</td>
</a>
</tr>
@endforeach
</tbody>
<tfoot>
然后我写了这个脚本部分,这会让用户在点击 table 的一行时进入一个新页面,数据以隐藏形式呈现。
$(document).ready(function(e) {
$('#patients').DataTable({
responsive: true,
fixedColumns: true,
columnDefs: [
{
targets: "_all",
className: 'dt-body-center'
}
]
});
var table = $('#patients').DataTable();
$('#patients tbody').on('click', 'tr', function () {
var data = table.row( this ).data();
if (window.confirm( 'Stai per accedere ai dettagli di: '+data[0]+'' )) {
//here I need a way to select the form inside the row just cliked
console.log(data); //this do not contains the hidden form
};});});
也许我混合了太多的概念,有一种简单的方法可以达到相同的目标(单击此 table 的一行并通过 post 转到包含一些附加数据的下一页方法),但实际上我想通过 jquery 找到一种方法 select 行内的表单,然后进行提交。
使用 类 可以更轻松地使用 jquery 选择器
<tbody>
@foreach ($patients as $patient)
<tr>
<td>{{ $patient['display'] }}</td>
<td>
<form class="table-form" action="..." method="...">
<input class="table-hidden" type="hidden" value='@json($patient)' name="patient">
<button type="submit">View</button>
</form>
</td>
</tr>
@endforeach
</tbody>
$(() => {
let table = $('#patients').DataTable({
responsive: true,
fixedColumns: true,
columnDefs: [
{
targets: "_all",
className: 'dt-body-center'
}
]
});
$('.table-form').on('submit', e => {
let patient = JSON.parse($(this).find('.table-hidden').val());
if(window.confirm(`Stai per accedere ai dettagli di: ${patient[0]}`) {
// console.log(patient);
} else {
e.preventDefault();
}
});
});
因此,在此示例中有两行,每行在其第一个 TD 中都有一个表单。您所要做的就是将处理程序附加到每个 TR,并使用 jQuery 的选择器在该 TR 中查找表单。最后你只需调用 submit 就可以了。
希望我的想法对你有所帮助。
$(document).ready(function(e) {
const table = $('#patients').DataTable({
responsive: true,
fixedColumns: true,
columnDefs: [
{
targets: "_all",
className: 'dt-body-center'
}
]
});
table.on('click', 'tr', function () {
const form = $(this).find('form').first();
if (window.confirm( 'Stai per accedere ai dettagli di: '+form.attr('action')+'' )){
//here I need a way to select the form inside the row just cliked
// console.log(data); //this do not contains the hidden form
form.submit()
};
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
<link href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css" rel="stylesheet"/>
<table id="patients" class="display" style="width:100%">
<thead>
<tr>
<th>Form</th>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<form method='get' action='https://google.com'>
<input type='submit' value='GOOGLE'/>
</form>
</td>
<td>Tiger Nixon</td>
<td>System Architect</td>
<td>Edinburgh</td>
<td>61</td>
<td>2011/04/25</td>
<td>0,800</td>
</tr>
<tr>
<td>
<form method='get' action='https://wikipedia.com'>
<input type='submit' value='WIKIPEDIA'/>
</form>
</td>
<td>Garrett Winters</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>63</td>
<td>2011/07/25</td>
<td>0,750</td>
</tr>
</tbody>
</table>
我把这个表格写在 table 和 html laravel 集体中:
@foreach($patients as $patient)
<tr>
{{Form::open(['route' => 'patientDetails'])}}
{{Form::hidden('patient',json_encode($patient))}}
{{Form::close()}}
<td>{{$patient['display']}}</td>
.......
</td>
</a>
</tr>
@endforeach
</tbody>
<tfoot>
然后我写了这个脚本部分,这会让用户在点击 table 的一行时进入一个新页面,数据以隐藏形式呈现。
$(document).ready(function(e) {
$('#patients').DataTable({
responsive: true,
fixedColumns: true,
columnDefs: [
{
targets: "_all",
className: 'dt-body-center'
}
]
});
var table = $('#patients').DataTable();
$('#patients tbody').on('click', 'tr', function () {
var data = table.row( this ).data();
if (window.confirm( 'Stai per accedere ai dettagli di: '+data[0]+'' )) {
//here I need a way to select the form inside the row just cliked
console.log(data); //this do not contains the hidden form
};});});
也许我混合了太多的概念,有一种简单的方法可以达到相同的目标(单击此 table 的一行并通过 post 转到包含一些附加数据的下一页方法),但实际上我想通过 jquery 找到一种方法 select 行内的表单,然后进行提交。
使用 类 可以更轻松地使用 jquery 选择器
<tbody>
@foreach ($patients as $patient)
<tr>
<td>{{ $patient['display'] }}</td>
<td>
<form class="table-form" action="..." method="...">
<input class="table-hidden" type="hidden" value='@json($patient)' name="patient">
<button type="submit">View</button>
</form>
</td>
</tr>
@endforeach
</tbody>
$(() => {
let table = $('#patients').DataTable({
responsive: true,
fixedColumns: true,
columnDefs: [
{
targets: "_all",
className: 'dt-body-center'
}
]
});
$('.table-form').on('submit', e => {
let patient = JSON.parse($(this).find('.table-hidden').val());
if(window.confirm(`Stai per accedere ai dettagli di: ${patient[0]}`) {
// console.log(patient);
} else {
e.preventDefault();
}
});
});
因此,在此示例中有两行,每行在其第一个 TD 中都有一个表单。您所要做的就是将处理程序附加到每个 TR,并使用 jQuery 的选择器在该 TR 中查找表单。最后你只需调用 submit 就可以了。
希望我的想法对你有所帮助。
$(document).ready(function(e) {
const table = $('#patients').DataTable({
responsive: true,
fixedColumns: true,
columnDefs: [
{
targets: "_all",
className: 'dt-body-center'
}
]
});
table.on('click', 'tr', function () {
const form = $(this).find('form').first();
if (window.confirm( 'Stai per accedere ai dettagli di: '+form.attr('action')+'' )){
//here I need a way to select the form inside the row just cliked
// console.log(data); //this do not contains the hidden form
form.submit()
};
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
<link href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css" rel="stylesheet"/>
<table id="patients" class="display" style="width:100%">
<thead>
<tr>
<th>Form</th>
<th>Name</th>
<th>Position</th>
<th>Office</th>
<th>Age</th>
<th>Start date</th>
<th>Salary</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<form method='get' action='https://google.com'>
<input type='submit' value='GOOGLE'/>
</form>
</td>
<td>Tiger Nixon</td>
<td>System Architect</td>
<td>Edinburgh</td>
<td>61</td>
<td>2011/04/25</td>
<td>0,800</td>
</tr>
<tr>
<td>
<form method='get' action='https://wikipedia.com'>
<input type='submit' value='WIKIPEDIA'/>
</form>
</td>
<td>Garrett Winters</td>
<td>Accountant</td>
<td>Tokyo</td>
<td>63</td>
<td>2011/07/25</td>
<td>0,750</td>
</tr>
</tbody>
</table>