【问题标题】:Playing sound after jquery onclickjquery onclick后播放声音
【发布时间】:2016-06-19 09:35:57
【问题描述】:

我的网络表单中有以下 HTML,如下所示:

 <asp:GridView ID="gridLanguages" AutoGenerateColumns="false" runat="server">
          <Columns>
            <asp:TemplateField>
                 <ItemTemplate>
                     <a class="audio">
                          <%# Eval("Name") %>
                      <audio  >
                         <source src="<%# "/languages/" + Eval("Path") %>" type="audio/mpeg">
                    </audio>
                     </a>
                 </ItemTemplate>
            </asp:TemplateField>
          </Columns>
      </asp:GridView>

这是我用来触发事件的函数:

<script>

        $('document').ready(function () {
            $(".audio").click(function (event) {
                console.log("Event triggered"); // this line is shown in console so this part is ok
                var audio = $(this)[0];
            });
        });

   </script>

如您所见,gridview 数据源可以包含多个路径,这些路径指向我已成功加载的 mp3 文件。现在我想要实现的是当事件在元素上触发时,我想播放被点击的相应音频文件。 我还试图弄清楚如何,如果用户点击另一个 mp3 链接,所有以前的音频文件都将被停止,而当前的音频文件将播放......我怎样才能做到这一点?

谁能帮帮我??

【问题讨论】:

    标签: javascript jquery asp.net audio webforms


    【解决方案1】:

    您可以使用.each() 来迭代所有.audio 元素,将currentTime 设置为0,调用.pause();然后打电话给.load().play()event.target:var audio = $(this)[0];。注意,document 是一个对象,而不是一个字符串

        $(document).ready(function () {
            var elems = $(".audio");
            elems.click(function (event) {
                elems.find("audio").each(function() {                 
                  this.pause();
                  this.currentTime = 0;
                });
                console.log("Event triggered");
                var audio = $(this).find("audio")[0];
                audio.load();
                audio.play();
            });
        });
    

    【讨论】:

    • 嘿,你的代码出现了这个错误:Uncaught TypeError: this.pause is not a function。编辑,这个也是:Uncaught TypeError: audio.load is not a function
    • @perkes456 查看更新后的帖子。最初没有注意到&lt;audio&gt;.audio 元素的子元素;在.each() 处添加.find() 并定义audio 变量
    • 我想如果我们停止播放其他音频,一次只会播放一个音频。因此无需迭代所有音频元素。
    • @ShaunakD 不确定你的意思?
    • 我的意思是,我们无论如何都会在播放新音频时停止其他音频。然后就不需要迭代所有音频并暂停它们,因为一次只会播放一个。我们应该只停止那个音频。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多