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但是不能根据字段是否变更去调用

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
DogLoML
最佳答案

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

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

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

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

8个月前 评论

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

8个月前 评论
DogLoML

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

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

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

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