IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 绑定按钮,保存修改选择到的按钮的操作 -> 正文阅读

[JavaScript知识库]绑定按钮,保存修改选择到的按钮的操作

有时候做项目我们需要保存修改选择按钮对象,既然修改选择到的按钮,那就包括新增按钮和取消按钮,这是在页面上需要呈现许多按钮的选择,同时也需要取消按钮或者重新选择所需要选择的按钮对象,下面讲一下选择按钮的时候,保存修改,涉及到取消按钮高亮效果的选择

?

一、使按钮高亮

可以绑定一个方法来进行选择到的对象进而修改。下面进入主题,这里我们在HTML上面设置了按钮,然后到script里面先 声明一个ID,然后在下面写一个方法点击选择对象,可以用console在页面上点击按钮的时候获取ID,然后声明一个ID ,因为之前在上面就已经设置了一个substring方法(substring() 函数返回字符串的指定部分。),所以这里调用这个方法。假如需要删掉这个按钮就要回到数据库里面把模块信息表和权限表的数据进行新增与删除。然后,创建一个新的数组把需要新增的按钮权限给到对应的模块明细ID里面,还需要创建新的数组把需要删除的按钮权限给到对应的模块明细ID。

然后回到方法,使用if else 判断按钮当前的状态,有两种情况一种之前没有被选中,另一种之前已经被选中。

然后呢,之前没有被选中,我们就做一个操作,将这个类使用removeclass移除,那么就是高亮被选中的效果。

二、使当前点击的按钮高亮(就需要判断这个按钮原先是否高亮)

?

1.原来没有高亮效果

如果等于负一,那数据库里面是没有这个权限的,然后往数组添加ID,把这个ID给到这个数组,数据库就有这个权限了。因为这个数组需要传到控制器,并且遍历所有的ID进行新增操作。

2。原有高亮效果,去掉又添加高亮效果

另外一种情况大于负一,对于同一个按钮,原先是已经选择到的,然后点击取消然后再点击这个按钮,这个时候应该要显示已经有这个权限了,简单点理解,就是已有的权限,去掉高亮效果之后又添加高亮效果。那么这个就是在原先删除的数组里面,因为这是已经有 的权限,那就意味着数据库已经存在,既然点击取消又点击高亮,就需要删除然后再新增,所以是大于负一。

删除或新增数组中的元素:splice

index:从哪里开始删除或者添加元素,开始的索引(必选)

howmany:删除元素的个数(必选)

iteml、itemX:添加进来的元素(可选)

把删除的数组去调用splice()方法。? ??

3.之前被选中

第一种情况,原先高亮,然后就直接取消高亮效果

这种情况,需要将权限从删除,使用indexOf获取到h这个ID并且大于负一,因为它已经有这个权限所以大于负一。还需要判断是否存在,若存在,就删除。

根据上面需要删除与新增的数组做下面需要删除、新增的权限。

视图点击选择对象的代码:


        //点击选择对象
        function changeSelect(ele)
        {
            console.log(ele.id);
            var eleId = ele.id.substring(11, ele.id.length);
            //判断按钮当前的状态
            if ($(ele).hasClass("layui-btn-primary"))
            {
                $(ele).removeClass("layui-btn-primary");
                //之前没有被选中
                if (ModularDetailIds.indexOf(eleId) == -1) {
                    //当前在数据库中没有的权限
                    insertModularDetail.push(eleId);
                }
                else
                {
                    //已有的权限,去掉高亮效果之后又添加高亮效果
                    if (delModularDetail.indexOf(eleId) > -1)
                    {
                        //删除数组中的元素
                        //array.splice(index,howmany,item1,.....,itemX)
                        //返回数组中通过测试的第一个元素的索引
                        //array.findIndex(function(currentValue, index, arr), thisValue) 
                        //function(currentValue, index, arr)必需。为数组中的每个元素运行的函数。
                        delModularDetail.splice(delModularDetail.findIndex(function (item) { if (item == eleId) return item; }), 1);
                        //delModularDetail.splice(delModularDetail.findIndex(item => item == eleId), 1);
                    }
                }
            }
            else
            {
                //之前被选中
                $(ele).addClass("layui-btn-primary");
                //是否是已有的权限
                if (ModularDetailIds.indexOf(eleId) > -1) {
                    delModularDetail.push(eleId);
                }
                else
                {
                    if (insertModularDetail.indexOf(eleId)>-1)
                    {
                        insertModularDetail.splice(insertModularDetail.findIndex(item => item == eleId),1);
                    }
                }

            }

            //需要删除的权限
            console.log(delModularDetail);
            //需要新增的权限
            console.log(insertModularDetail);

        }

接下来进行视图的保存修改操作。

获取input标签里面的ID,还有获取页面上的ID再用if else 判断是否为空,获取表单元素提交表单,

设置一个提示还有一个计时器,用来关闭按钮的时间,最后关闭父窗口的弹窗(先得到iframe层的索引再执行关闭)。

视图保存修改的代码:

//保存修改
        function submitForm()
        {
            $("#insertModularDetailIds").val(insertModularDetail);
            $("#deleteModularDetailIds").val(delModularDetail);

            var userType = $("#UserType").val();
            var describe = $("#Describe").val();
            if (userType != null && describe != null && userType != "" && describe != "") {
                $("#formUserType").ajaxSubmit(function (message) {
                    //提示
                    layer.msg(message.Text, { icon: 0, skin: "layui-layer-molv" });
                    if (message.State) {
                        //设置计时器
                        setTimeout(closeThis, 1000);
                    }
                });
            } else {
                layer.msg("请填写完整", { icon: 0, skin: "layui-layer-molv" });
            }
            return false;

        }

        //关闭父窗口的弹窗
        function closeThis() {
            var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
            parent.layer.close(index); //再执行关闭 

            //调用父窗体的关闭(关闭所有按钮)。
            //parent.layer.closeAll();
        }

跳转到控制器添加一个方法,保存修改选择到的按钮的操作。使用input标签里面的name值,获取页面上传过来的数据。

接下来,,修改数据,涉及到两个表 的修改数据,也可以使用事务回滚,try catch 方便捕获错误。查询用户类型数据,新增用户类型权限,分割字符串,然后foreach遍历数组,并且判断不等于空的时候,新增权限。遍历完再判断addJurisdictions列表里面内容大于0,说明是有数据的,然后做一个保存新增操作。

然后根据deljurisdictions分割字符串,并且判断不等于空,还有判断deljurisdictions大于0,大于0 就进行删除操作。

最后提交事务,修改成功。

控制器保存修改的代码:

   public ActionResult UpdateUserType(SYS_UserType modUserType,string insertModularDetailIds,string deleteModularDetailIds) 
        {
            ReturnJson msg = new ReturnJson();
            using (var scope = new TransactionScope())
            {
                try
                {
                    int oldCount = myModel.SYS_UserType.Count(m=>m.UserTypeID!=modUserType.UserTypeID&&m.UserType==modUserType.UserType);
                    if (oldCount == 0)
                    {
                        //查询用户类型表数据
                        SYS_UserType dbUserType = myModel.SYS_UserType.Single(m => m.UserTypeID == modUserType.UserTypeID);

                        dbUserType.UserType = modUserType.UserType;
                        dbUserType.Describe = modUserType.Describe;
                        dbUserType.typeClass = modUserType.typeClass;
                        myModel.Entry(dbUserType).State = EntityState.Modified;
                        myModel.SaveChanges();

                        List<PW_Jurisdiction> addJurisdictions = new List<PW_Jurisdiction>();
                        List<PW_Jurisdiction> delJurisdictions = new List<PW_Jurisdiction>();
                        //新增用户类型权限
                        //分割字符串
                        string[] arrModularDetailId = insertModularDetailIds.Split(',');
                        foreach (string item in arrModularDetailId)
                        {
                            if (item!="") 
                            {
                                //新增权限
                                PW_Jurisdiction juridition = new PW_Jurisdiction();
                                juridition.UserTypeID = modUserType.UserTypeID;
                                juridition.ModularDetailID =Convert.ToInt32(item);
                                addJurisdictions.Add(juridition);
                            }
                        }
                        if (addJurisdictions.Count>0) 
                        {
                            myModel.PW_Jurisdiction.AddRange(addJurisdictions);
                            myModel.SaveChanges();
                        }

                        //分割字符串
                        string[] arrDelModularDetailId = deleteModularDetailIds.Split(',');
                        foreach (string item in arrDelModularDetailId)
                        {
                            var intId = Convert.ToInt32(item);
                            if (item != "")
                            {
                                PW_Jurisdiction delJurisdiction = myModel.PW_Jurisdiction.Single(m=>m.UserTypeID==modUserType.UserTypeID
                                &&m.ModularDetailID == intId);

                                delJurisdictions.Add(delJurisdiction);
                            }
                        }
                        if (delJurisdictions.Count > 0)
                        {
                            myModel.PW_Jurisdiction.RemoveRange(delJurisdictions);
                            myModel.SaveChanges();
                        }

                        //提交事务
                        scope.Complete();
                        msg.State = true;
                        msg.Text = "修改成功";

                    }
                    else 
                    {
                        msg.Text = "角色重复,请更改用户类型名称!";
                    }

                }
                catch (Exception e)
                {
                    msg.Text = "数据异常!";
                }

            }
            return Json(msg,JsonRequestBehavior.AllowGet);
        }

??

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-31 23:55:34  更:2022-03-31 23:58:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:26:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码