dcat admin 表单多选框,如何点击删除加提示框,确认xxx之类的

使用的框架为dcat admin
如图所示,form表单中有一项multipleSelect
现在测试提了个需求,需要点击单个选项删除时弹出一个提示框,提示xxx,是否确认删除。这个xxx是根据删除对象变动的。

   $form->multipleSelect('question', '题目')>options($questions)->attribute('id', 'question-select')

请问这个该如何实现。
我自己的思路是js做监听,先给多选框加了个id


        admin_script(
            <<<JS
               var myVar = false;
                setTimeout(function() {
                myVar = true;
                $(document).ready(function() {
                    var buttons = document.querySelectorAll('button');
                    for (var i = 0; i < buttons.length; i++) {
                    var button = buttons[i];
                    var ariaDescribedBy = button.getAttribute('aria-describedby');
                    // 判断按钮的属性值是否以 select2-question-select-container 开头
                    if (ariaDescribedBy && ariaDescribedBy.startsWith('select2-question-select-container')) {
                        console.log(button);
                        button.addEventListener('click', function(event) {
                        // 在这里编写优先触发的 onclick 方法逻辑
                        console.log('优先触发的 onclick 方法');
                        Dcat.confirm('确定上架此课程吗?', null, function() {
                            return false;
                        },function(){
                            // 如果需要在这个方法中 return false 后不再触发其他 onclick 方法,可以使用 stopImmediatePropagation() 方法来阻止事件传播
                            event.stopImmediatePropagation();
                        });

                        });
                    }
                    }
                });
                }, 1000);
            JS
        );

结合gpt写了个js,延时是因为,有时候页面没加载完select2就执行到这了,取不到button。
这个可以走到弹框,但问题在于js异步执行,confirm没点击确认呢就往下走了,还有用了event.stopImmediatePropagation()弹窗点没后,也不清除删除项了。
再有就是话术没想好该怎么动态传递。
大佬们有遇到过类似需求么

或者换个思路,在触发form saving 时候,判断题目有没有变更,有变更则弹出confirm弹窗。判断变更好办,在saving中怎么弹confirm窗呢,找到个form的confirm但是不能根据字段是否变更去调用

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
DogLoML
最佳答案

dcat的多选下拉基于select2实现,可以搜索关键词:select2删除确认。

以下是一种解决方法,通过监听内置的unselecting事件实现。

$('#brandCodeList').on('select2:unselecting',function() {
    if (!confirm('你确定要删除此项吗?')){
        return false;
    } else {
        return true;
    }
})
1年前 评论
伽蓝幻梦 (楼主) 1年前
DogLoML (作者) 1年前
讨论数量: 5

特殊需求别用内置组件了,自己写一个组件比较好实现

1年前 评论

可以重写该组件,然后在 bootstrap.php 中引入

1年前 评论
DogLoML

dcat的多选下拉基于select2实现,可以搜索关键词:select2删除确认。

以下是一种解决方法,通过监听内置的unselecting事件实现。

$('#brandCodeList').on('select2:unselecting',function() {
    if (!confirm('你确定要删除此项吗?')){
        return false;
    } else {
        return true;
    }
})
1年前 评论
伽蓝幻梦 (楼主) 1年前
DogLoML (作者) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!