新闻中心

在动态生成的HTML表格中实现星级评分

2025-10-21
浏览次数:
返回列表

在动态生成的html表格中实现星级评分

本文档旨在解决在动态生成的HTML表格中实现星级评分时遇到的问题,重点讲解如何确保每个表格行中的星级评分组件独立工作,互不影响。通过修改HTML元素的id和name属性,使每个评分组件具有唯一标识符,从而实现独立评分功能。

问题分析

在动态生成的HTML表格中,如果每个表格行中的星级评分组件的 id 和 name 属性都相同,那么当用户在某一行进行评分时,会影响到其他行的评分状态。这是因为浏览器无法区分这些具有相同 id 和 name 属性的元素,导致操作行为互相干扰。

解决方案:确保ID和Name属性的唯一性

为了解决这个问题,我们需要确保每个表格行中的星级评分组件的 id 和 name 属性都是唯一的。一种常见的做法是将事件名称(或者其他能够唯一标识每一行的属性)添加到 id 和 name 属性中,从而区分不同的评分组件。

代码示

以下是如何修改J*aScript代码,以确保每个评分组件的 id 和 name 属性都是唯一的:

AI Surge Cloud AI Surge Cloud

低代码数据分析平台,帮助企业快速交付深度数据

AI Surge Cloud 87 查看详情 AI Surge Cloud
$(document).ready(function () {
    function addData() {
        var eventname = $("#eventname").val();
        var eventdate = $("#eventdate").val();
        var eventloc = $("#eventloc").val();
        var eventauthor = $("#eventauthor").val();
        var eventdesc = $("#eventdesc").val();

        if (eventname.trim() === '' || eventdate.trim() === '' || eventloc.trim() === '' || eventauthor.trim() === '' || eventdesc.trim() === '') {
            alert("Bitte füllen Sie alle Felder aus");
            return;
        }

        if (!isValidDate(eventdate)) {
            alert("Datum muss folgendem Format entsprechen: dd.mm.yyyy ein");
            return;
        }

        // Validierung und Hinzufügen zur Tabelle

        $(".table tbody tr").last().after(
            '<tr>' +
            '<td><input type="checkbox" id="select-row"></td>' +
            '<td>' + eventname + '</td>' +
            '<td>' + eventdate + '</td>' +
            '<td>' + eventloc + '</td>' +
            '<td>' + eventdesc + '</td>' +
            '<td>' + eventauthor + '</td>' +
            '<td><button class="btn btn-link like-button">Gefällt mir</button></td>' +
            '<td><div class="rate"><input type="radio" id="'+eventname+'5" name="'+eventname+'rate" value="5" /><label for="'+eventname+'5" title="text">5 stars</label><input type="radio" id="'+eventname+'4" name="'+eventname+'rate" value="4" /><label for="'+eventname+'4" title="text">4 stars</label><input type="radio" id="'+eventname+'3" name="'+eventname+'rate" value="3" /><label for="'+eventname+'3" title="text">3 stars</label><input type="radio" id="'+eventname+'2" name="'+eventname+'rate" value="2" /><label for="'+eventname+'2" title="text">2 stars</label><input type="radio" id="'+eventname+'1" name="'+eventname+'rate" value="1" /><label for="'+eventname+'1" title="text">1 star</label></div></td>'
            + '</tr>'
        );

        function isValidDate(dateString) {
            var regex = /^\d{2}\.\d{2}\.\d{4}$/;
            return regex.test(dateString);
        }

    }

    // Eventlistener für den Button
    $('#addData').click(addData);

    $('.table').on('click', '.like-button', function () {
        $(this).toggleClass('liked');
        if ($(this).hasClass('liked')) {
            $(this).text('Gefällt mir nichtmehr');
            $(this).closest('tr').addClass('liked-event');
        } else {
            $(this).text('Gefällt mir');
            $(this).closest('tr').removeClass('liked-event');
        }
    });
});

在上面的代码中,我们将 eventname 添加到了每个评分组件的 id 和 name 属性中。例如,id 变成了 eventname5,name 变成了 eventnameRate。 这样,每个事件的评分组件都有了唯一的标识符,从而实现了独立的评分功能。

HTML 和 CSS 代码 (无需修改)

以下是HTML和CSS代码,这些代码无需修改,因为问题主要在于J*aScript代码中动态生成的元素的 id 和 name 属性的冲突。

<head>
    <meta charset="utf-8" />
    <title>Eventüberblick</title>
    <link href="style.css" rel="stylesheet" type="text/css">

    <!-- Bootstrap 4 CDN -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
    <script src="Script1.js"></script>

    <!-- Fontawesome CDN Link -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.1/css/all.min.css" />
</head>

<header>
    <a href="index.html">Überblick</a>
    <a href="CreateEvent.html">Event erstellen</a>
</header>

<body>
    <h1 class="headline" style="text-align: center;">Neues Event</h1>


    <div class="container">

        <div class="form-div">
            <div class="row">
                <div class="col-md-3">
                    <input type = "text" class="form-control" id="eventname" placeholder="Eventname">
                </div>
                <div class="col-md-3">
                    <input type = "datetime" class="form-control" id="eventdate" placeholder="Eventdatum">
                </div>
                <div class="col-md-3">
                    <input type = "text" class="form-control" id="eventloc" placeholder="Eventort">
                </div>
                <div class="col-md-3">
                    <input type = "text" class="form-control" id="eventauthor" placeholder="Eventautor">
                </div>
                <div class="col-md-3">
                    <input type = "text" class="form-control" id="eventdesc" placeholder="Eventbeschreibung">
                </div>
                <div class="col-md-3" style="text-align: right;">
                    <button class="btn btn-primary" id="addData">Hinzufügen</button>
                </div>
            </div>
        </div>

        <h2 class="headline" style="text-align: center;">Eventliste</h2>
        <div class="container">
            <table class="table">
                <thead>
                    <tr>
                        <th>All<input type="checkbox" id="select-all"></th>
                        <th>Eventname</th>
                        <th>Eventdatum</th>
                        <th>Eventort</th>
                        <th>Eventbeschreibung</th>
                        <th>Eventautor</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>

                    </tr>
                </tbody>
            </table>
        </div>
    </div>

   <script></script> 

</body>
*{
    margin: 0;
    padding: 0;
}
.rate {
    float: left;
    height: 46px;
    padding: 0 10px;
}
.rate:not(:checked) > input {
    position:absolute;
    top:-9999px;
}
.rate:not(:checked) > label {
    float:right;
    width:1em;
    overflow:hidden;
    white-space:nowrap;
    cursor:pointer;
    font-size:30px;
    color:#ccc;
}
.rate:not(:checked) > label:before {
    content: '★ ';
}
.rate > input:checked ~ label {
    color: #ffc700;    
}
.rate:not(:checked) > label:hover,
.rate:not(:checked) > label:hover ~ label {
    color: #deb217;  
}
.rate > input:checked + label:hover,
.rate > input:checked + label:hover ~ label,
.rate > input:checked ~ label:hover,
.rate > input:checked ~ label:hover ~ label,
.rate > label:hover ~ input:checked ~ label {
    color: #c59b08;
}

注意事项

  • 唯一标识符的选择: 选择能够唯一标识每一行的属性作为 id 和 name 的前缀。 如果事件名称不唯一,可以考虑使用事件ID或其他唯一标识符。
  • 代码维护: 在修改代码时,确保所有的 id 和 name 属性都得到了正确的更新,避免出现遗漏或错误。
  • 动态生成元素的事件绑定: 如果你需要对动态生成的元素绑定事件,可以使用事件委托的方式,将事件绑定到静态父元素上。

总结

通过确保动态生成的HTML表格中每个星级评分组件的 id 和 name 属性的唯一性,可以有效地解决评分组件互相干扰的问题。 这种方法简单易行,能够快速地实现独立的评分功能。在实际开发中,可以根据具体的需求选择合适的唯一标识符,并注意代码的维护和更新。

以上就是在动态生成的HTML表格中实现星级评分的详细内容,更多请关注其它相关文章!


# 变成了  # 晋宁县网站建设  # 营销推广方案的参考文献  # 北京专业seo  # 曲周网络营销推广优化  # 台阶课件网站建设ppt  # 贵阳seo方舟网络  # 餐饮营销推广策划公司  # 山东网站优化解决方案  # 盘龙城网站推广  # 许昌seo公司优选16火星  # 相关文章  # 是唯一  # 简单易行  # 如果你  # 容器内  # css  # 拖拽  # 自定义  # 绑定  # 复选框  # ai  # 浏览器  # go  # ajax  # bootstrap  # js  # html  # jquery  # java  # javascript 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  利用5118提升短视频内容效果_5118短视频关键词优化方法  J*aScript中localStorage数据的获取、清洗与格式化教程  漫蛙漫画官方首页 漫蛙2漫画在线阅读入口  C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器  创客贴用户入口官网登录 创客贴网页版电脑版系统  Typer应用中灵活处理命令行参数的令牌化与解析  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  抖音极速版最新版本 抖音极速版官方下载地址  深入理解与实现最大堆的Heapify过程:常见错误与修正  如何在 Windows 11 中启动游戏手柄设置  移动端XML文件怎么转换成Excel 手机和平板上的解决方案  Go语言中Map存储的结构体如何调用指针方法:深入解析与实践  Composer如何处理Git子模块(submodule)依赖_Composer与Git Submodule的对比与选择  如何使 Jest 模拟函数默认抛出错误以提高测试效率  Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询  如何更改在 Excel 中打开超链接时的默认浏览器  Flexbox布局实践:实现粘性导航栏与底部固定页脚  漫蛙2漫画入口 漫蛙正版网页漫画直达网址  AO3官方在线访问地址 Archive of Our Own最新镜像合集  邮政快递单号查询入口 邮政快递物流信息在线查询入口  MAC怎么在地图App里使用“四处看看”_MAC体验部分城市的3D实景街景  Android Studio计算器C键功能异常排查与修复教程  J*a实现学校排课程序_面向对象结构化项目示例  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等  如何使用 Excel 发布器与 Power BI 分享 Excel 洞察  Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏  修复二维数组索引越界异常:一维循环到二维坐标的正确映射  c++如何使用chrono库处理时间_c++标准库时间与日期操作  Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践  Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录  J*aScript 字符串标签转换:使用正则表达式高效替换  深入理解J*a编译器的兼容性选项:从-source到--release  《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元  uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验  QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录  特斯拉自动驾驶房车计划曝光 原型车将于2027年亮相  4399免费游戏网址入口 4399小游戏免费入口点开即玩  Python:递归比较文件夹内容并找出特定类型文件的差异  TikTok网页版直接登录 TikTok网页端官方平台入口  React Hooks最佳实践:动态组件状态管理的组件化方案  Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示  J*aScript中安全有效地处理localStorage字符串数据  荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程  Python中如何避免重复条件判断:利用数据结构实现动态逻辑  Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】  解决Python logging 中 datefmt 导致时间戳固定不变的问题  Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式  蛙漫2台版漫画地址 Manwa2正版网页版链接 

搜索