Во-первых, давайте сделаем это формой.Формы являются стандартным способом инкапсуляции набора полей ввода.Их хорошо понимают обычные браузеры, но также и программы чтения с экрана, а что нет.
<form>
<label>
Stream
<input name="url" type="url" />
</label>
</form>
Это похоже на то, что вы имели, но я сделал несколько изменений:
<label>
элементам нужно либо обернуть то, что они маркируют, либо им нужен атрибут for
.В противном случае они не очень полезны. - Я отбросил класс
label
.Вы можете оформить это в CSS без него, просто используя label
в качестве селектора. - Я установил имя для
input
, чтобы упростить получение его значения позже. input
теперь имеет тип url
.Он имеет некоторую встроенную проверку и будет возвращаться к обычному text
вводу, если браузер его не поддерживает.
Ваш audio
элемент в порядке, но давайте немного переделаем:
<audio src=""></audio>
По сути, поскольку мы получаем только один URL-адрес от пользователя, дочерние элементы source
не нужны.Нам также не следует устанавливать type
, потому что мы не знаем, что это будет.
Теперь, чтобы напрямую ответить на ваш вопрос ... мы обрабатываем отправку формы с помощью JavaScript.
// Ensure the page is loaded before querying for elements to attach handlers to
document.addEventListener('DOMContentLoaded', (e) => {
// Get the form, add a submit handler
document.querySelector('form').addEventListener('submit', (e) => {
// Get the form values from the form that was just submitted
const formData = new FormData(e.target);
// Set the audio `src` attribute from the form's `url` field input value
document.querySelector('audio').src = formData.get('url');
// Prevent default form handling (which would reload the page, in this case)
e.preventDefault();
});
});
Скрипка: https://jsfiddle.net/xnwr5jeq/7/