@ReytexGames

Как изменить placeholder при нажатии на переключатель (radio)?

Как изменить placeholder на определённый текст, при нажатии на переключатель (radio)?
5feb751d0075c664255298.png
<body>
  <form>
   <p><b>Выберите платёжную систему</b></p>
    <p><input name="method" type="radio" id="item1" value="qiwi" checked>Qiwi</p>
    <p><input name="method" type="radio" id="item2" value="ym">ЮMoney</p>
    <p><input name="method" type="radio" id="item3" value="wm">Webmoney</p>
    <p><input name="method" type="radio" id="item4" value="card">Карта</p>
    
    <input type="text" name="wallet" value="" required placeholder="79181234567"/>
    <small>Введите ваши реквизиты.</small>
  </form> 
 </body>
  • Вопрос задан
  • 254 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Радиокнопкам добавить data-атрибут, который будет содержать значение для плейсхолдера:

<input type="radio" name="method" data-placeholder="hello, world!!">
<input type="radio" name="method" data-placeholder="fuck the world">
<input type="radio" name="method" data-placeholder="fuck everything">

Как передать это значение из радиокнопки в инпут:

const updatePlaceholder = (input, radio) =>
  input.placeholder = radio.dataset.placeholder;
  // или
  // input.setAttribute('placeholder', radio.getAttribute('data-placeholder'));
  // input.attributes.placeholder.value = radio.attributes['data-placeholder'].value;

По событию change, имеющим своим источником радиокнопку, надо получить инпут, находящийся внутри той же формы. Можно от радиокнопки подняться к форме, внутри которой уже искать инпут. Или просто пройти по ссылкам - из радиокнопки в форму, которой она принадлежит, из коллекции элементов формы получить инпут по его имени.

Обработчик события change можно сделать делегированным:

document.addEventListener('change', ({ target: t }) => {
  if (t.matches('input[name="method"]')) {
    updatePlaceholder(t.closest('form').querySelector('[name="wallet"]'), t);
  }
});

Или назначать каждой радиокнопке индивидуально:

const onChange = ({ target: t }) =>
  updatePlaceholder(t.form.elements.wallet, t);

for (const form of document.forms) {
  for (const radio of form.elements.method) {
    radio.addEventListener('change', onChange);
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы