質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

600閲覧

クリックしたら音楽が変わるようにしたい

karasumaru

総合スコア7

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/11/19 10:28

前提・実現したいこと

html,JavaScriptでサイトを作っています。
ボタンをクリックしたら音楽が変わるようにしたいです。

具体的には「memories.mp3」を「pulse.mp3」に変更したく、
javaScriptのattrを使ったのですが、
ファイルが変わりません。

どこがまずいのでしょうか?
どうぞよろしくお願いします。

なお、Chromeでautoplayが動作しない対策で、
無音ファイルを先に読み込むようにしてあります。

発生している問題・エラーメッセージ

エラーメッセージは出ないが、音楽ファイルが変更されず ページのソースを見ても変更されてない。

該当のソースコード

html

1<div id="hoge"> 2 <iframe src="audio/silence.mp3" allow="autoplay" id="audio" style="display:none"></iframe> 3 <audio id="player" controlslist="nodownload" controls <?php if($user_vol==2){ echo("autoplay"); } ?> 4 loop> 5 <source src="audio/memories.mp3" type="audio/mp3"> 6 </audio> 7</div>

JavaScript

1$('#botton_hoge').on('click', () => { 2 console.log("botton_hoge click"); 3 $('#hoge source').attr('src', 'audio/pulse.mp3'); 4});

試したこと

1.attrの対象を、

$('#hoge player source')
$('#player source')

などにしましたが、変更されませんでした。


2.ソースファイル部分をdivで囲み、

<div id="foo"> <source src="audio/memories.mp3" type="audio/mp3"> </div>

として、

$('#foo source').attr('src', 'audio/pulse.mp3');

としましたがだめでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

$('#player').attr('src', 'audio/pulse.mp3');

とすると手元の環境(Google Chrome 87.0.4280.66)では曲を入れ替えることができました。

曲名を source 要素で指定していますが、source 要素は複数の候補をブラウザに提示するための audio 要素の src 属性を指定する代替記法のため、実態としては audio 要素の src 属性を書き換えるのが正しいようです。複数の候補を提示しないなら、最初の曲も audio 要素の src 属性で直接指定してしまって良いと思います。

では複数の候補を提示して曲を差し替えたいときはどうするのか?というのは疑問ですが、多分 audio 要素全体を動的に生成して置き換えるのではないかと(未検証)

以下、参考まで

投稿2020/11/19 22:01

saoyagi2

総合スコア210

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

karasumaru

2020/11/21 01:39

ありがとうございます、教えていただいた通り、$('#player')を指定したところ音楽が変更できました。 source要素についてもよく理解できていなかったので、とても参考になりました。ありがとうございました。
saoyagi2

2020/11/22 01:15

すいません。回答が不十分でした。ご質問のコードでも `$('#player')[0].load();` を追加することで source 要素でも曲を入れ替えることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問