Laravel - Bootstrap 数据表(yajra)中的单选按钮

Posted

技术标签:

【中文标题】Laravel - Bootstrap 数据表(yajra)中的单选按钮【英文标题】:Laravel - Radio button in Bootstrap Datatable (yajra) 【发布时间】:2016-09-25 23:29:25 【问题描述】:

这是我的场景: 我在引导数据表的列中使用单选按钮,包括另一个中的部分视图,部分包含以下代码:

<input type="radio" name="shipping_address_id" 
       value="$shippingAddress->id" !! $shippingAddress->default?'checked="checked"':''!! />

并且是通过这种方式使用数据表远程加载添加的:

 Datatables::of($addresses)
                    ->addColumn('action', function ($shippingAddress) 
                        return view('admin.shippingaddress.partials.actions_invoice', compact('shippingAddress'))->render();
                    )->make(true);

并且在$shippingAddress->default为false的时候是这样渲染的:

<input type="radio" name="shipping_address_id" value="8">

如果它是真的,就像这样:

<input type="radio" name="shipping_address_id" value="3" checked="checked" />

但是当我调用 dt.reload() rdb 时,即使它包含checked="checked" 它也没有真正被检查。

更新

即使我以这种方式初始化数据表:

addressesDataTable = $('#addressesDataTable').DataTable(
                processing: true,
                serverSide: true,
                searchDelay: 1000,
                ajax: 
                    type: 'GET',
                    url: url.replace('idToReplace', $('#buyerSelect').val()),
                    error: function (a, b, c) 
                        console.log(a);
                        console.log(b);
                        console.log(c);
                    ,
                    dataSrc: function (response) 
                        return response.data;
                    
                ,
                columns: [
                    data: 'name', name: 'countries.name',
                    data: 'postal', name: 'shipping_addresses.postal',
                    data: 'city', name: 'shipping_address.city',
                    data: 'address', name: 'shipping_address.address',
                    data: 'default', name: 'shipping_address.default',
                    data: 'action', name: 'action', orderable: false, searchable: false
                ]
            );

即使我重新加载表(我尝试以这种方式使用重新加载回调函数):

addressesDataTable.ajax.reload(function()
                $('input[name=shipping_address_id]:checked').prop("checked", true);
            );

选中的单选按钮并未真正选中。

【问题讨论】:

dt.reload() 电话在哪里以及如何进行?听起来你是在客户端javascript中做的。如果是这种情况,您不应该传递一个回调来处理更新已经提供的 html 吗? Laravel 负责初始渲染,它不知道您在客户端 javascript 中运行的函数。 @JohnnyMagrippis 我更新了添加细节的问题 你能提供一个小提琴吗? “没有真正检查”是什么意思?属性已设置但未出现选中标记?或者你看到它被选中了但 JS 返回 false? 【参考方案1】:

我怀疑你有一个单选按钮数组和

                $('input[name=shipping_address_id]').prop("checked", true);

正在检查所有这些。如果您有多个具有相同名称的单选按钮,并且所有这些单选按钮都已选中,则最后一个选中的单选按钮显示为已选中,而其他单选按钮则未选中。您可能需要过滤以找到具有正确 ID 的复选框,然后进行检查。

【讨论】:

我更新了问题并修复了我的代码添加':checked'【参考方案2】:

这个问题就是这一行:

$("input[name=shipping_address_id]").prop("checked", true);

您引用了 所有 名称为 shipping_address_id 的输入,因此您还检查了 所有 名称为 shipping_address_id 的输入。 p>

如果您只想检查一个输入,那么您可以使用其(唯一)id/类来引用该输入。

如果输入有 id 则使用:

$("input#id-of-your-input").prop("checked", true);

如果输入有一个类,那么使用:

$("input.class-of-your-input").prop("checked", true);

注意:如果另一个元素与该输入具有相同的 className,则该元素也将被检查。

祝你好运,万事如意。

【讨论】:

以上是关于Laravel - Bootstrap 数据表(yajra)中的单选按钮的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Route 使用 Javascript/Bootstrap 复选框删除

Laravel 7:将数据库结果分成 3 行结果,并将每个结果放入 bootstrap4 行

在 Laravel 请求中验证 Bootstrap 日期时间选择器

Bootstrap 模态隐藏在 Laravel 7 中不起作用

Laravel 项目中使用 Bootstrap 框架

为 Laravel 启用 Bootstrap 4