kryptobs2000
kryptobs2000

Reputation: 3537

firefox 25 does not have play() defined for audio tags?

I have the following audio tag:

<audio preload>
  <source src='/sounds/notify.ogg' type='audio/ogg'>
</audio>

I want to play it through js, so naturally I would expect calling $("audio").play() to do it (it's the only audio tag on the page), but I get an error stating play isn't defined. Upon inspecting it that is the case. The audio element has no play property. Every tutorial or resource I read says this is all you need to do, but... well, I just can't do it. Is my version of FF just broken or am I somehow missing something not stated in these various texts?

Upvotes: 0

Views: 98

Answers (2)

Qantas 94 Heavy
Qantas 94 Heavy

Reputation: 16020

play() is a DOM method, not a jQuery method, which means that you'll need to get the actual DOM element before being able to get the play property. To get the actual DOM element, you can use the jQuery get() method:

$('audio').get(/*insert element index*/).play();

or simply use array indices:

$('audio')[/*insert element index*/].play();

And for even more choice, you can do something like this:

$('audio').eq(/*insert element index*/).prop('play')();

You could even do something like this to play each audio element:

$('audio').each(function () { this.play(); });

Upvotes: 4

megawac
megawac

Reputation: 11363

As Qantas mentioned play is not a jQuery method, but you can easily add it if desired as below:

$.fn.play = function() {
   return this.each(function() {
      this.play();
   });
}

Upvotes: 2

Related Questions