热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javascript-JS中在线选座已经实现点击座位将select对应怎么反过来点击select对应座位

当我选select时间如A2则对应available和click已经实现点击座位,将select对应怎么反过来点击select对应座位{代码...}点击座位,将select对应{代码...}

当我选select时间如A2则对应available和click
/ 已经实现点击座位,将select对应怎么 反过来点击select对应座位 /

var $cart = $('#selected-seats'),
$counter = $('#counter'),
$total = $('#total'),
sc = $('#seat-map').seatCharts({
    map: [ //座位图
        'ff__ff',
        'ff__ff',
        '_____',
        'ff__ff',
        'ff__ff',
        'ff__ff',
        'ff__ff',
        'ff__ff',
        'ff__ff'
    ],
    seats: { //定义座位属性
        f: {
            price   : 100,
            classes : 'first-class', 
            category: '一等座'
        },
        e: {
            price   : 40,
            classes : 'economy-class', 
            category: '二等座'
        }                    
    },
    naming : { //定义行列等信息
        top : true,
        columns: ['A', 'B', 'C', 'D', 'F','G'],
        rows: ['1','2','','3','4','5','6','7','8','9'],
        getLabel : function (character, row, column) {
            return column + row;
        }
    },
    legend : { //定义图例
        node : $('#legend'),
        items : [
            [ 'f', 'available',   '一等座' ],
            [ 'e', 'available',   '二等座'],
            [ 'f', 'unavailable', '已停用']
        ]                    
    },
    click: function () {
        if (this.status() == 'available') {//可选座
              $('
  • ' + this.data().category + '
    ' + this.settings.label + '号位
  • ') .attr('id', 'cart-item-'+this.settings.id) .data('seatId', this.settings.id) .appendTo($cart); //更新票数 $counter.text(sc.find('selected').length+1); //计算总计金额 $total.text(recalculateTotal(sc)+this.data().price); return 'selected'; } else if (this.status() == 'selected') {//已选中 $counter.text(sc.find('selected').length-1); $total.text(recalculateTotal(sc)-this.data().price); //删除已预订座位 $('#cart-item-'+this.settings.id).remove(); return 'available'; } else if (this.status() == 'unavailable') {//已售出 //已售出 return 'unavailable'; } else { return this.style(); } }, focus : function() { if (this.status() == 'available') { $("#seat-info").show().html(this.settings.label+ '号位'); var cd = getMousePoint(event); $("#seat-info").css({"left":(cd.x+10)+'px',"top":(cd.y-30)+"px"}); return 'focused'; } else { return this.style(); } } });

    / 点击座位,将select对应 /

    
    
    $(".available").on("click", function(){
        var txt = $(this).text();
        
        //获取当天点击 位置 所在的行 的索引,用以判断是一等座还是二等座
        var index = $(this).parent(".seatCharts-row").index();
        //6及6以上为二等座
        if(index>=6){
            
            var htmlTxt = ""+ txt +"";
            
            }else{
                var htmlTxt = ""+ txt +"";
                }
                
        $("select").find("option:selected").val(txt);
        
        $("select").find("option:selected").text(htmlTxt);
    

    回复内容:

    当我选select时间如A2则对应available和click
    / 已经实现点击座位,将select对应怎么 反过来点击select对应座位 /

    var $cart = $('#selected-seats'),
    $counter = $('#counter'),
    $total = $('#total'),
    sc = $('#seat-map').seatCharts({
        map: [ //座位图
            'ff__ff',
            'ff__ff',
            '_____',
            'ff__ff',
            'ff__ff',
            'ff__ff',
            'ff__ff',
            'ff__ff',
            'ff__ff'
        ],
        seats: { //定义座位属性
            f: {
                price   : 100,
                classes : 'first-class', 
                category: '一等座'
            },
            e: {
                price   : 40,
                classes : 'economy-class', 
                category: '二等座'
            }                    
        },
        naming : { //定义行列等信息
            top : true,
            columns: ['A', 'B', 'C', 'D', 'F','G'],
            rows: ['1','2','','3','4','5','6','7','8','9'],
            getLabel : function (character, row, column) {
                return column + row;
            }
        },
        legend : { //定义图例
            node : $('#legend'),
            items : [
                [ 'f', 'available',   '一等座' ],
                [ 'e', 'available',   '二等座'],
                [ 'f', 'unavailable', '已停用']
            ]                    
        },
        click: function () {
            if (this.status() == 'available') {//可选座
                  $('
  • ' + this.data().category + '
    ' + this.settings.label + '号位
  • ') .attr('id', 'cart-item-'+this.settings.id) .data('seatId', this.settings.id) .appendTo($cart); //更新票数 $counter.text(sc.find('selected').length+1); //计算总计金额 $total.text(recalculateTotal(sc)+this.data().price); return 'selected'; } else if (this.status() == 'selected') {//已选中 $counter.text(sc.find('selected').length-1); $total.text(recalculateTotal(sc)-this.data().price); //删除已预订座位 $('#cart-item-'+this.settings.id).remove(); return 'available'; } else if (this.status() == 'unavailable') {//已售出 //已售出 return 'unavailable'; } else { return this.style(); } }, focus : function() { if (this.status() == 'available') { $("#seat-info").show().html(this.settings.label+ '号位'); var cd = getMousePoint(event); $("#seat-info").css({"left":(cd.x+10)+'px',"top":(cd.y-30)+"px"}); return 'focused'; } else { return this.style(); } } });

    / 点击座位,将select对应 /

    
    
    $(".available").on("click", function(){
        var txt = $(this).text();
        
        //获取当天点击 位置 所在的行 的索引,用以判断是一等座还是二等座
        var index = $(this).parent(".seatCharts-row").index();
        //6及6以上为二等座
        if(index>=6){
            
            var htmlTxt = ""+ txt +"";
            
            }else{
                var htmlTxt = ""+ txt +"";
                }
                
        $("select").find("option:selected").val(txt);
        
        $("select").find("option:selected").text(htmlTxt);
    

    $('select').on('change', function()
    {
        var _this = $(this);
        //这里获取选中值,例如A4
        var seatCode = _this.find("option:selected").val().split(""); //不知道你放的是什么值,假装这里是A4
        //然后可以根据数组[A,4]具体进行样式的切换和你自己的业务逻辑
    });

    你的HTML和JS混编的很厉害,这样逻辑不清楚,而且失去弹性,比如说如果用户说我要2个二等座,明显你的代码已经扩展不出来了。推荐你先用JS搞定逻辑,至于显示的问题稍后搞定就OK了。例

    座位清单 = {'A1': {已选: false; 等级:一等; 左边:false, 右边: A2, 前面: false, 后面: B1}, 'A2': {已选: true, 等级:一等; 左边:A1, 右边: false, 前面: false, 后面: B2}, ...};
    区域清单 = {一等:[A1, A2,...], 二等:...};
    function isSelectedSeat(x, y) {
        if (y) x = x + y;
        return 座位清单[x].已选;
    }
    function getFreeSeats(lv) {
        var free = [];
        foreach 座位编号 from 区域清单.lv {
            if (isSelectedSeat(座位编号)
                free.push(座位编号);
        }
        return free;
    }
    function setSeatSelected(sites, disableSelected) {
        //将一个座位设为选中/取消,你可以在此处增加对HTML的处理
        return true/false/void;
    }
    function autoSelected(座位等级,订票数量){
        //这个比较麻烦,你要选出等级中的空座,然后尽量把位置连续的找出来,如果你很善良应该优先推荐最好的位置,或者你返回所有可供选择的组合也行(这通常用于接线员处理电话订票的时候)。
        var useableSeats = [];
        ...
        return useableSeats.length ? useableSeats : false;
    }

    通过以上的逻辑,不管你点座位还是用下拉框,最终都是调用setSeatSelected处理,而autoSelected是自动推荐座位算法,逻辑上自动推荐之后你需要询问用户这个位置行不行才能调用后面的处理。

    上面的伪码主要是书写方便,你可以自行将其封装为对象,这样如果你们有多个场所的话只要用适当的参数实例化一下就OK了。

    推荐阅读
    • CSS3选择器的使用方法详解,提高Web开发效率和精准度
      本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
    • 知识图谱——机器大脑中的知识库
      本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
    • 《数据结构》学习笔记3——串匹配算法性能评估
      本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
    • 动态规划算法的基本步骤及最长递增子序列问题详解
      本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
    • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
    • VScode格式化文档换行或不换行的设置方法
      本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
    • 基于layUI的图片上传前预览功能的2种实现方式
      本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
    • 云原生边缘计算之KubeEdge简介及功能特点
      本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
    • Java实战之电影在线观看系统的实现
      本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
    • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
    • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
    • Voicewo在线语音识别转换jQuery插件的特点和示例
      本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
    • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
    • 后台获取视图对应的字符串
      1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
    • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
    author-avatar
    jessiemiumiu_956
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有