2011-07-05 17 views
25

Próbuję użyć przycisku, aby rozpocząć ścieżkę w tagu dźwiękowym HTML5 przy użyciu jQuery, ale ciągle pojawia się błąd.HTML5 Audio i jQuery

var song = $('#audio'); 

$('#play').click(function() { 
song.play(); 
}); 

Kiedy używać document.getElementById ('dźwięku'), to działa, ale przy użyciu selektora jQuery pojawia się następujący błąd:

Uncaught TypeError: Object [object Object] nie ma sposobu " graj "

Dzięki za pomoc.

Odpowiedz

56

Spróbuj znaleźć rodzimą elementu DOM w jQuery wie nic o .play metodę na owiniętej tablicy zwróconej przez selektor $('#audio'):

song.get(0).play(); 
+3

który pracował ... dlaczego? Czy możesz podać krótkie wyjaśnienie, tak, jak rozumiem. Dzięki!! – user699242

+7

@ user699242, jeśli użyjesz '$ ('.. some selektor ..')' zwraca tablicę rzeczywistych obiektów DOM zgodnych z selektorem. Metoda .play jest natywną metodą HTML5, którą należy wywołać w rzeczywistym rodzimym elemencie DOM. Tak więc musisz pobrać ten macierzysty element DOM z tablicy, która jest zwracana przez selektor jQuery. A ponieważ używasz selektora id ('# audio'), możemy założyć, że w twoim DOM znajduje się pojedynczy element pasujący do tego selektora, więc możemy bezpiecznie użyć' .get (0) 'aby go pobrać. Więc w zasadzie, gdy użyjesz '$ (...)', możesz wywołać tylko funkcje jQuery na wyniku, a 'play' nie jest –

+0

To naprawdę pomaga. Dlaczego jednak zgłasza niezdefiniowany błąd podczas używania .get (0) .tagName? – panda

13

Można również napisać go jak song.trigger('play');. To pozwoli ci użyć selektora $('#audio');.

3

Zamiast .get() wystarczy użyć notacji obiektu:

var song = $('#audio'); 

$('#play').click(function() { 
    song[0].play(); 
}); 

to mniej wpisać :)