По сути название события onchange происходит при изменении каких-либо данных в полях формы. Следует учитывать, что событие onchange наступает далеко не для всех элементов формы, поэтому и обработка его выполняется для:

Обработка события onchahge для текстовых полей

Текстовые поля изменяются при вводе текста в них, но в отличие от события oninput, эти изменения для события onchange становятся заметны только после потери фокуса текстовым полем. В примере ниже вы можете набрать любой текст в поле, а затем нажать на кнопку с текстом "Проверить" или кликнуть в любом месте примера или страницы.  После этого набранный вами текст отобразится ниже поля ввода. Также можно нажать клавишу Enter или Tab.

Код примера приведен ниже:

Аналогичным способом мы можем обработать событие onchange для большого текстового поля (элемент <textarea>).  В примере ниже мы получим текст из этого поля с id="myArea" при нажатии на клавишу Tab, т.е. тоже при потере фокуса текстовым полем.

Нажми Tab, когда закончишь ввод текста

Обработка события onchahge для выпадающего списка

Задача у нас будет такая: нужно поменять картинку в теге img c id="picHolder", выбрав  ее из выпадающего списка по названию. Поскольку элемент <select> является "подчиненным", т.е. дочерним элементом тега <form>, то в html-разметке мы создадим соответствующие теги и зададим каждому из них атрибут name:

Элемент select в свою очередь является родительским контейнером для нескольких элементов <option>, которые и формируют пункты списка. В каждом из них есть атрибут value, в который мы запишем путь к картинкам из папки images. Именно этот атрибут и будет "главным действующим лицом" в нашем скрипте.

Событие onchange наступает для списка, когда пользователь выбирает другой пункт. В этот момент мы можем назначить в src картинки, обратившись к ней по id (picHolder) значение атрибута value списка, подхватываемого им из выбранного элемента option. Обращение к самому списку происходит в виде name_формы.name_списка. Получаем такой несложный скрипт:

Чашка с котом

Обработка события onchahge для полей с типом number

Поле с типом number изменяется при вводе значения вручную или при клике по стрелочкам этого поля. Если вы вводите цифры вручную, то нужно нажать клавишу Enter или увести фокус на другой элемент. Можно, например, нажать клавишу Tab.

В качестве примера будем изменять ширину div-а с помощью поля для ввода чисел. В этом поле мы можем указать минимальное (min), максимальное (max), текущее значение (value) и шаг приращения/уменьшения числа (step). При обработке события onchange нам понадобится изменения атрибута и js-свойства value:

Проверяем результат.

Обработка события onchahge для полей с типом range

Для ползунков (элементы типа <input type="range">) событие onchange наступает при перемещении ползунка. У этого элемента такие же атрибуты, как и у поля для ввода чисел (<input type="number">). При обработке события onchange нам понадобится значение ползунка, которое мы получаем с помощью его атрибута и js-свойства value.  Для того, чтобы видеть числовое значение value ползунка, мы выведем его в span с id="rangeInfo" внутри элемента label для ползунка.

Обратите внимание, что событие onchange наступает для ползунка и при прокрутке колесика мыши, но первоначально этот элемент должен получить фокус.

Обработка события onchange для поля с типом checkbox

Для флажков (<input type="checkbox">) тоже можно обработать событие onchange. В примере ниже от Jon Kantner показано, как можно изменить внешний вид флажка, просто задав ему другой класс по событию onchange и использовав анимацию типа @keyframes.

See the Pen Pill Switch by Elen (@ambassador) on CodePen.

Автор: Админ

10 комментариев

  1. Здравствуйте Админ. У меня при обновлении выбранный пункт запоминается, тут проблем нет. Меня интересовал вопрос: возможно при выборе определенного пункта (например пункт 3) запомнить значение value (равное 19 как в вашем примере) в какую-то переменную, чтоб ее можно было вывести на странице или использовать в дальнейших расчетах..

  2. писал вопрос, был на модерации, сейчас вообще его никак не видно. система комментариев работает или глюк?

    • Добрый день.
      Ваш комментарий действительно был на модерации.
      Однако отвечать на него мгновенно нет возможности.

  3. select name="cat" class="select-wrapper"
    option value="" Все категории option
    option value="10" Пункт один option
    option value="11" selected=selected Пункт два option
    option value="15" Пункт три option
    option value="19" Пункт четыре option
    select
    код не передался, надеюсь сейчас получится....

    • По поводу вашего вопроса - код такой:

      Посмотреть работающий пример можно по ссылке на codepen.io.
      Запоминание выбранного меню реализуется за счет использования localStorage.
      Однако, если я не ошибаюсь, вы используете этот код для выбора категорий WordPress. Если речь идет о создании настроек в Customizer, то обычно выбранный пункт система WP Customizer запоминает сама. Если же это выбор категорий в виджетах, советую посмотреть код одного из таких виджетов, например, тех же категорий, чтобы понять, как реализуется запоминание выбранного пункта средствами функций WordPress. Посмотрите информацию еще по этой ссылке.

  4. Здравствуйте Админ.
    Я не сильно разбираюсь в программировании, поэтому прошу посильной помощи. Возникла такая необходимость:
    Есть выпадающий список, работает как мне надо, т.е. при обновлении страницы помнит выбранный option
    Как можно вытащить значение value выбранного пункта и запомнить в переменной, чтобы ее можно было вставить в php запрос? Эта переменная - числовое значение - пока выбран соответствующий пункт не должна сбрасываться при обновлении страницы.
    Заранее спасибо.

    Все категории
    Пункт один
    Пункт два
    Пункт три
    Пункт четыре

  5. Добрый день,подскажите пожалуйста,как реализовать такой пример :
    У нас есть выпадающий список select и внутри него варианты с числами для Step, как сделать так чтобы при выборе цифры step менялся.
    Спасибо за любую помощь)

    • Уважаемый Никто!
      Интересный у вас ник. По поводу вашего вопроса: поскольку непонятно, что представляет собой Step, и как именно он должен меняться, то будем исходить из того, что Step - это <div id="step-block">, для которого нужно в тексте поменять цифру рядом с текстом Step + цвет этого текста.
      Поэтому в <select name="stepSelect" id="stepSelect"> мы сделаем ряд элементов <option>, в которых в атрибуте value будет значение цвета, а в самом тексте - цифра.
      Код, который будет приводить к изменениям в div-е при выборе разных цифр.

  6. Добрый день,подскажите пожалуйста,как реализовать такой пример :
    У нас есть выпадающий список select и внутри него варианты с числами и последний вариант "Выбрать другое", по нажатию на "Выбрать другое" под списком должен появиться инпут куда пользователь может ввести свой вариант.

    Спасибо за любую помощь)

    • День добрый.
      Достаточно просто. Использую атрибут hidden для того, чтобы скрывать input ниже списка.
      Разметка:

      В скрипте идет привязка к id select-а и input-а, т.к. непонятно, нужна ли вам форма для отправки данных или просто для получения одного значения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *