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

如何将button的value值传递给modal,实现单modal适配多个YouTube视频

实现方案

第一步:调整批量生成的按钮属性

所有视频按钮统一指向同一个模态框,把视频ID、视频标题存到自定义data属性中即可,不需要为每个按钮绑定不同的模态框ID,按钮示例代码如下:

<button type="button" class="btn btn-outline-primary mb-1" 
  data-bs-toggle="modal" 
  data-bs-target="#videoModal" 
  data-video-id="Zdq6f4RXJt"
  data-video-title="Introduction to MongoDB">
Video
</button>

循环生成按钮时,只需替换data-video-id和data-video-title的对应值即可。

第二步:编写单个公共模态框

全局仅保留一个模态框,ID设为videoModal,其中标题、iframe地址留空待动态替换:

<div class="modal fade" id="videoModal" tabindex="-1" role="dialog" aria-hidden="true">
  <div class="modal-dialog modal-semi-full modal-dialog-centered">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="videoModalTitle"></h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        <iframe id="youtubePlayer" width="100%" height="100%" src="" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
      </div> 
    </div>
  </div> 
</div>

第三步:添加事件监听实现动态传值

监听Bootstrap模态框的打开/关闭事件,自动从触发按钮读取属性更新模态框内容,同时关闭时清空iframe地址避免关闭后仍播放声音:

// 监听模态框打开事件
const videoModal = document.getElementById('videoModal')
videoModal.addEventListener('show.bs.modal', function (event) {
  // 获取触发模态框的按钮元素
  const triggerBtn = event.relatedTarget
  // 提取按钮中存储的视频ID和标题
  const videoId = triggerBtn.getAttribute('data-video-id')
  const videoTitle = triggerBtn.getAttribute('data-video-title')
  // 拼接YouTube嵌入地址
  const embedUrl = `https://www.youtube.com/embed/${videoId}`
  
  // 更新模态框标题和视频播放地址
  const modalTitle = videoModal.querySelector('.modal-title')
  const player = videoModal.querySelector('#youtubePlayer')
  modalTitle.textContent = videoTitle
  player.src = embedUrl
})

// 监听模态框关闭事件,清空视频地址停止播放
videoModal.addEventListener('hide.bs.modal', function () {
  const player = videoModal.querySelector('#youtubePlayer')
  player.src = ''
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:54:08