You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现点击日历预约槽将data-event-index值存入slotID输入框

解决方案

问题1:切换日期后点击事件失效

动态生成的预约槽元素不会继承初始绑定的事件,改用事件委托,将点击事件绑定到日历的父容器上,通过事件冒泡捕获子元素的点击行为,后续生成的新预约槽也能触发点击事件。

问题2:无法获取data-event-index属性值

点击事件触发时,直接从当前点击的.event-container元素上读取data-event-index属性,可通过element.dataset.eventIndex(更简洁)或element.getAttribute('data-event-index')获取。

修改后的完整代码

const SlotIdSelected = document.getElementById('slotID');

fetch("https://share.ninox.com/mjpp0k6tuvtekgat8bgokas5rcq6i4ew1lre")
  .then(res => res.json())
  .then((data) => {
    const selectedAvailable = $("input[name='available']:checked").val();
    const data_filter = data.filter(element => element.available >= selectedAvailable);
    
    $(document).ready(function() {
      $('#calendar').evoCalendar({
        'format': 'mm/dd/yyyy',
        'theme': 'Royal Navy',
        'language': 'de',
        'firstDayOfWeek': 1,
        'sidebarToggler': true,
        'todayHighlight': true,
        'eventListToggler': true,
        'eventHeaderFormat': 'dd. MM yyyy',
        'calendarEvents': data_filter,
      });

      // 事件委托:绑定到日历容器,捕获所有.event-container的点击
      $('#calendar').on('click', '.event-container', function() {
        // 获取目标元素的data-event-index值
        const eventIndex = this.dataset.eventIndex;
        // 赋值到指定输入框
        SlotIdSelected.value = eventIndex;
      });
    });
  });

额外优化说明

  • 提前获取input[name='available']的选中值,避免在filter回调中重复执行DOM查询
  • 使用普通函数绑定事件回调,确保this指向当前点击的.event-container元素(若用箭头函数,需改用event.target获取触发元素)

内容的提问来源于stack exchange,提问作者Ralf Becker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 09:33:17