2011-07-05 30 views
25

Tôi đang cố gắng sử dụng nút để bắt đầu bản nhạc trong thẻ âm thanh HTML5 bằng jQuery, nhưng tôi vẫn gặp lỗi.HTML5 Audio và jQuery

var song = $('#audio'); 

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

Khi tôi sử dụng document.getElementById ('âm thanh'), nó hoạt động, nhưng khi sử dụng bộ chọn jQuery tôi nhận được lỗi sau:

lỗi chưa gặp: Object [đối tượng Object] không có phương pháp ' chơi '

Cảm ơn bạn đã được trợ giúp.

Trả lời

56

Hãy thử lấy phần tử DOM bản địa như jQuery không biết gì về .play phương pháp trên mảng bọc được trả về bởi bộ chọn $('#audio'):

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

Đó làm việc ... tại sao? Bạn có thể đưa ra một lời giải thích ngắn gọn, chỉ vì vậy tôi hiểu. Cảm ơn!! – user699242

+7

@ user699242, khi bạn sử dụng '$ ('.. some selector ..')', nó trả về một mảng các đối tượng DOM thực tế phù hợp với bộ chọn của bạn. Phương thức .play là một phương thức HTML5 gốc mà bạn cần gọi trên phần tử DOM thực tế. Vì vậy, bạn cần phải lấy phần tử DOM nguyên gốc này từ mảng được trả về bởi bộ chọn jQuery. Và vì bạn đang sử dụng bộ chọn id ('# audio'), chúng ta có thể giả định rằng có một phần tử duy nhất trong DOM của bạn khớp với bộ chọn này để chúng ta có thể sử dụng' .get (0) 'một cách an toàn để tìm nạp nó. Vì vậy, về cơ bản khi bạn sử dụng '$ (...)' bạn có thể gọi chỉ các hàm jQuery trên kết quả và 'play' không phải là –

+0

Nó thực sự hữu ích. Tuy nhiên, tại sao nó báo cáo lỗi không xác định khi sử dụng .get (0) .tagName? – panda

13

Bạn cũng có thể viết nó như song.trigger('play');. Điều đó sẽ cho phép bạn sử dụng bộ chọn $('#audio');.

3

Thay vì .get() chỉ sử dụng ký hiệu đối tượng:

var song = $('#audio'); 

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

Đó là ít hơn để gõ :)

Các vấn đề liên quan