Ajax实例,选择table中要处理的内容,点击button,确认是否删除并返回值,有弹窗

这是一个关于前端样式和交互实现的示例,涉及layui框架的使用。用户可以输入iccid、卡号,选择运营商、处理状态和处理方式。‘处理完成’按钮触发确认对话框,通过AJAX将选择的数据发送到后台`TmpFlowChangePackage/ProcessingComplete`接口,完成处理并显示操作结果。如果选择的数据为空,会提示用户选择套餐。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前端样式:

在这里插入图片描述

前端代码:

<div class="layui-fluid">
    <div class="layui-row layui-col-space15">
        <div class="layui-col-md12">
            <div class="layui-card">
                <div class="layui-card-header">发货前,改套餐需求</div>
                <div class="layui-form layui-card-header layuiadmin-card-header-auto">
                    <div class="layui-form-item">

                        <div class="layui-inline">
                            <label class="layui-form-label">iccid</label>
                            <div class="layui-input-block">
                                <input name="iccid" placeholder="请输入" autocomplete="off" class="layui-input"
                                       type="text">
                            </div>
                        </div>

                        <div class="layui-inline">
                            <label class="layui-form-label">卡号</label>
                            <div class="layui-input-block">
                                <input name="msisdn" placeholder="请输入" autocomplete="off" class="layui-input"
                                       type="text">
                            </div>
                        </div>

                        <div class="layui-inline">
                            <label class="layui-form-label">运营商</label>
                            <div class="layui-input-block">
                                <select name="operatorId" lay-verify="">
                                    <option>全部</option>
                                    {volist name="OperatorName" id="OperatorName"}
                                    <option value="{$OperatorName.id}">{$OperatorName.name}</option>
                                    {/volist}
                                </select>
                            </div>
                        </div>

                        <div class="layui-inline">
                            <label class="layui-form-label">处理状态</label>
                            <div class="layui-input-block">
                                <select name="taskStatus" lay-verify="">
                                    <option>全部</option>
                                    <option selected="selected" value="0">未处理</option>
                                    <option value="1">已处理</option>
                                </select>
                            </div>
                        </div>

                        <div class="layui-inline">
                            <label class="layui-form-label">处理方式</label>
                            <div class="layui-input-block">
                                <select name="executeWay" lay-verify="">
                                    <option>全部</option>
                                    <option value="1">系统</option>
                                    <option value="2">人工</option>
                                </select>
                            </div>
                        </div>

                        <div class="layui-inline">
                            <button class="layui-btn layuiadmin-btn-useradmin" lay-submit=""
                                    lay-filter="LAY-user-front-search">
                                <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
                            </button>
                        </div>

                        <div style="display: none">
                            <button class="layui-btn layuiadmin-btn-useradmin" lay-submit=""
                                    lay-filter="export_all" id="export_all">
                                导出
                            </button>
                        </div>

                    </div>
                </div>
                <div class="layui-card-body">
                    <script type="text/html" id="toolbar">
                        <div class="layui-btn-container">
                            <button class="layui-btn layui-btn-sm" lay-event="isSuccess">处理完成</button>
                            <input type="hidden" name="ycid" value="true">
                        </div>
                    </script>
                    <table class="layui-hide" id="test-table-page" lay-filter="test-table-page"></table>
                </div>
            </div>
        </div>
    </div>
</div>

<script src="__STATIC__/js/get_excel.js"></script>
<script>
    layui.config({
        base: '__STATIC__/layuiadmin/' //静态资源所在路径
    }).extend({
        index: 'lib/index' //主入口模块
    }).use(['index', 'table', 'form','laydate','excel'], function () {
        var admin = layui.admin
            , form = layui.form
            , layer = layui.layer
            , table = layui.table
            , excel = layui.excel;

        //监听搜索
        form.on('submit(LAY-user-front-search)', function (data) {
            var field = data.field;

            //执行重载
            table.reload('test-table-page', {
                where: field,page: {curr: 1}
            });
        });

        let data_cols = [[
            {type: 'checkbox'},
            {field: "id", title: "业务流水号", width:200},
            {field: "account", title: "用户名", width:200},
            {field: "iccid", title: "iccid", width:200},
            {field: "msisdn", title: "卡号", width:200},
            {field: "operatorName", title: "运营商", width:200},
            {field: "operatorCity", title: "所属地", width:200},
            {field: "packageType", title: "卡类型", width:200},
            {field: "packageCodeSys", title: "套餐编码", width:200},
            {field: "packageName", title: "变更套餐", width:400},
            {field: "taskStatus", title: "处理状态", width:200},
            {field: "executeWay", title: "处理方式", width:200},
            {field: "addTime", title: "创建时间", width:200},
        ]];

        //导出表格
        let url='{:Url("showList")}';
        getExcel(form,excel,url,data_cols);

        table.render({
            elem: '#test-table-page'
            , url: '{:Url("showList")}'
            , toolbar: "#toolbar"
            , limit: 10
            , limits: [10, 20, 40, 80, 160, 500, 1000, 5000, 10000]
            , defaultToolbar: ['filter', 'print',{
                title: '导出全部'
                ,layEvent: 'EXPORT_ALL'
                ,icon: 'layui-icon-export'
            }]
            , cols: data_cols,
            page: true
        });

        //头工具栏事件-处理完成
        table.on('toolbar(test-table-page)', function (obj) {
            if (obj.event == 'EXPORT_ALL') {
                document.getElementById("export_all").click();
            }
            //layui数据表格监听按钮
            var checkStatus = table.checkStatus(obj.config.id);
            if (obj.event == 'isSuccess') {
                var data = checkStatus.data;
                layer.confirm('确定这'+data.length+'张卡的套餐修改完成了吗,确定则无法撤销?', {
                    btn: ['确定','我再检查一下']
                }, function(){
                    $.ajax({
                        'url':'{:Url("TmpFlowChangePackage/ProcessingComplete")}',
                        'data':JSON.stringify(data),
                        'success':function(data){
                            if (data.code === 1) {
                                parent.layer.alert(data.msg,{
                                    title: '成功'
                                });
                                location.reload();
                            } else {
                                parent.layer.alert(data.msg,{
                                    title: '失败'
                                });
                                location.reload();
                            }
                        },
                        'dataType':'json',//返回的格式
                        'type':'post',//发送的格式
                    });
                }, function(){
                    layer.msg('谢谢,小心驶得万年船',{
                        time: 20000, //20s后自动关闭
                            btn: ['知道了']
                    });
                });
            }
        });

    });
</script>

代码解析:

关注【处理完成】button。

  <div class="layui-card-body">
        <script type="text/html" id="toolbar">
               <div class="layui-btn-container">
               //'isSuccess',定义触发点击事件
                   <button class="layui-btn layui-btn-sm" lay-event="isSuccess">处理完成</button>
               </div>
           </script>
          //这个table用来获取值,也就是这个button需要控制的内容
           <table class="layui-hide" id="test-table-page" lay-filter="test-table-page"></table>
   </div>

JS代码

  //头工具栏事件-处理完成
        table.on('toolbar(test-table-page)', function (obj) {//锁定button控制的页面范围
            if (obj.event == 'EXPORT_ALL') {
                document.getElementById("export_all").click();
            }
            var checkStatus = table.checkStatus(obj.config.id);
            if (obj.event == 'isSuccess') {
                var data = checkStatus.data;//获取选择table里的内容数据
                layer.confirm('确定这'+data.length+'张卡的套餐修改完成了吗,确定则无法撤销?', {
                    btn: ['确定','我再检查一下']
                }, function(){
                    $.ajax({
                        'url':'{:Url("TmpFlowChangePackage/ProcessingComplete")}',//控制器地址
                        'data':JSON.stringify(data),
                        'success':function(data){//返回内容
                            if (data.code === 1) {
                                parent.layer.alert(data.msg,{
                                    title: '成功'
                                });
                                location.reload();//页面重载
                            } else {
                                parent.layer.alert(data.msg,{
                                    title: '失败'
                                });
                                location.reload();//页面重载
                            }
                        },
                        'dataType':'json',//返回的格式
                        'type':'post',//发送的格式
                    });
                }, function(){
                    layer.msg('谢谢,小心驶得万年船',{//点击【'确定','我再检查一下'】button的弹出窗口
                        time: 20000, //20s后自动关闭
                            btn: ['知道了']
                    });
                });
            }
        });

js动画

后端处理代码

    /**
     * 发货前改套餐--处理完成button
     */
    public function ProcessingComplete()
    {
        $data = $this->request->getInput();//获取ajax传递的值
        $json_data = json_decode($data, true);

		//判断没有选择table的内容判断
        if (empty($json_data)) {
            $this->error('请选择套餐!');
        }
        $id = array();
        //获得业务流水号。因为$json_data获取的数据是一整条table数据,因此需要遍历拿出来他们的id,拼成一个新数组
        foreach ($json_data as $value) {
            array_push($id, $value['id']);
        }
        //重新拼成一个数组,这个是和java接口方,沟通好的数据格式
        $requestData = array(
            'taskIdList' => $id,
            'taskDealStatus' => 'true',
            "businessType" => 'DGD_CHG_PKG'
        );

        //处理完成button
        $OperatorName = Paas::request('/sim/home/disposeOfData', $requestData);

		//根据接口的返回值,判断是否处理成功
        if ($OperatorName['status'] == 0) {
            $this->success('处理完成');
        } else {
            $this->error('处理失败');
        }
    }
<think>嗯,用户想用JavaScript实现点击删除按钮弹窗确认是否删除文件,点击确认后执行删除操作。好的,我需要先理清楚这个功能的步骤。首先,用户需要一个删除按钮,可能是在HTML里用button元素,然后给它一个id或者类名方便选择。 接下来,得给这个按钮添加点击事件监听器。当用户点击时,触发一个确认弹窗。这里应该用confirm方法,它会返回一个布尔值,用户点击确定是true,取消是false。如果确认的话,就执行删除文件的函数。但用户可能没有具体的删除后端逻辑,所以需要提醒他们根据实际情况补充,比如用AJAX请求或者表单提交。 然后,考虑一下用户体验,可能需要阻止默认行为,比如如果按钮是在表单里,可能需要event.preventDefault()来防止表单意外提交。不过如果按钮是单独的,可能不需要这一步。但最好还是加上,以防万一。 另外,用户可能希望有更友好的提示,比如用自定义的模态框代替浏览器自带的confirm。这时候需要用HTML和CSS创建模态框,然后用JavaScript控制显示和隐藏。这部分需要详细说明,因为用户可能不熟悉如何实现自定义弹窗。 结构方面,先写基本的confirm实现,再扩展自定义模态框的方法。这样用户可以根据需求选择。代码示例要清晰,注释中文,方便理解。同时要提醒安全性和后端验证的重要性,防止CSRF攻击,确保删除操作有权限检查。 可能用户的问题还涉及到前端如何与后端交互,比如使用fetch API发送DELETE请求。这时候需要给出示例,包括处理成功和错误的回调,比如提示删除成功或失败,刷新页面或者更新DOM。 另外,考虑兼容性问题,比如IE不支持fetch,可能需要建议使用XMLHttpRequest或者polyfill。但大多数现代浏览器都支持fetch,所以可能不需要太深入,除非用户特别提到。 总结步骤:创建按钮→绑定点击事件→弹窗确认确认后调用删除函数→处理删除后的反馈。同时,给出两种方法:浏览器自带confirm和自定义模态框,附上代码示例和注意事项。</think>我将分步骤为您讲解如何用JavaScript实现点击删除弹窗确认功能: 一、基础实现步骤 1. HTML结构(需包含删除按钮) ```html <button id="deleteBtn">删除文件</button> ``` 2. JavaScript逻辑 ```javascript // 获取删除按钮 const deleteBtn = document.getElementById('deleteBtn'); // 绑定点击事件 deleteBtn.addEventListener('click', function(event) { // 阻止默认行为(如表单自动提交) event.preventDefault(); // 弹出确认对话框 const isConfirm = confirm('确定要删除该文件吗?'); // 用户点击确认后的操作 if(isConfirm) { // 这里执行实际删除操作 deleteFile(); } }); // 实际删除函数(需根据具体业务实现) function deleteFile() { // 示例:发送AJAX请求到服务器 // fetch('/delete-file', { method: 'DELETE' }) // .then(response => response.json()) // .then(data => { // console.log('删除成功'); // }); console.log('执行删除操作'); } ``` 二、进阶实现(自定义弹窗) 如果不想用浏览器默认的confirm对话框,可以用自定义模态框: 1. HTML添加弹窗结构 ```html <div id="customModal" class="modal"> <div class="modal-content"> <p>确定要删除该文件吗?</p> <button id="confirmDelete">确认删除</button> <button id="cancelDelete">取消</button> </div> </div> ``` 2. CSS样式 ```css .modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); } .modal-content { background: white; padding: 20px; width: 300px; margin: 100px auto; } ``` 3. JavaScript逻辑更新 ```javascript const modal = document.getElementById('customModal'); const confirmBtn = document.getElementById('confirmDelete'); const cancelBtn = document.getElementById('cancelDelete'); deleteBtn.addEventListener('click', function(event) { event.preventDefault(); modal.style.display = 'block'; }); confirmBtn.addEventListener('click', function() { deleteFile(); modal.style.display = 'none'; }); cancelBtn.addEventListener('click', function() { modal.style.display = 'none'; }); ``` 三、注意事项 1. 安全建议:删除操作必须在前端和后端都进行验证 2. 推荐使用AJAX(fetch或XMLHttpRequest)与后端通信 3. 删除成功后建议更新界面状态 4. 重要操作应记录日志 5. 如果是敏感操作,建议增加二次验证(如密码确认) 四、完整示例流程 1. 用户点击删除按钮 2. 弹出确认对话框 3. 用户点击确认: - 发送删除请求到服务器 - 根据响应结果提示用户 - 更新界面显示(如移除已删除的文件项) 4. 用户点击取消: - 关闭对话框 - 中止删除操作 根据实际需求,您可以选择使用浏览器默认confirm对话框或自定义模态框实现。建议重要操作采用更醒目的自定义弹窗配合加载状态提示和操作结果反馈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值