1

Когда другой <option> выбран в поле управления <select>, это событие можно обработать с помощью обработчика <select> в совершенно правильном направлении. Однако по некоторым причинам для моего проекта было бы очень удобно использовать делегированный обработчик <option>. Я попытался вызвать и делегировать необходимый обработчик с использованием разных событий. Полученные результаты были неудовлетворительными:Какие события (ы) выбрать, чтобы делегировать обработчик от <select> к выбранному <option>?

  • onfocus, onchange и onkeyup обработчики были вызваны только на контроль <select> и не были вызваны на вложенной <option>.
  • onclick обработчик работал по мере необходимости и был делегирован (активирован по выбранному <option>). Однако, очевидно, нет смысла использовать этот обработчик, поскольку другой option в элементе управления select также может быть выбран клавиатурой, а не только мышью.

Я прав? Я пропустил какое-либо стандартное событие DOM, которое можно использовать в случае? Или мне нужно использовать только своего рода полипол, например, focusin jQuery и focusout?

+0

Реализация отдельных блоков очень отличается между браузерами, они часто даже не реагируют на обычные события DOM, но являются частью «сумеречной зоны» внутри браузера. – Shikkediel

+0

BTW, я использую Firefox в настоящее время. –

ответ

0

Из дискуссии не являются ни одно событие DOM (s), которые соответствуют указанным требованиям.

0

Я не уверен, что полностью понимаю вашу потребность, но я постараюсь ответить.

Как вы говорите о JQuery, у меня есть решение:

$("#my-select").change(function() { 
    // $(this) refers to the select element 
    $(this).find("option:selected").each(function() { 
     // this function is called only once per change 
     // $(this) refers to the selected option 
    }) 
}); 

живой пример:

$("#my-select").change(function() { 
 
    // $(this) refers to the select element 
 
    $("#s_value").text($(this).val()); 
 
    $("#s_text").text($(this).find("option:selected").text()); 
 
    $(this).find("option:selected").each(function() { 
 
    // this function is called only once per change 
 
    // $(this) refers to the selected option 
 
    $("#o_value").text($(this).val()); 
 
    $("#o_text").text($(this).text()); 
 
    }) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<select id="my-select"> 
 
    <option value="1">Option 1</option> 
 
    <option value="2">Option 2</option> 
 
    <option value="3">Option 3</option> 
 
</select> 
 
<br>SELECTED (FROM SELECT) : 
 
<br>Value : <span id="s_value"></span> 
 
<br>Text : <span id="s_text"></span> 
 
<br> 
 
<br>SELECTED (FROM OPTION) : 
 
<br>Value : <span id="o_value"></span> 
 
<br>Text : <span id="o_text"></span> 
 
<br> 
 
<br>

+0

Хорошая попытка, @ Аполо, спасибо. К сожалению, я не хочу использовать jQuery в этом случае. Позвольте мне объяснить свой вопрос по-другому. Разумеется, мы можем назначить обработчик '', когда этот параметр выбран. Теперь мне кажется, что это невозможно. –

+0

Невозможно, как вы говорите. Но вы можете получить такое же поведение от выбранных событий. Вы можете перевести свой ответ на чистые js. Если вы не можете, я попробую в понедельник. Поместите обработчик на событие «onchange» выбранных элементов и получите выбранную опцию. – Apolo

+0

Большое спасибо, я могу сделать это сам. Моя проблема в том, что в моем проекте мне нужно поддерживать историю обработчиков, применяемых на определенной странице. Первоначально я создал эту историю как список «действий» (ака пар '[элемент, обработчик]') и не включил в этот список любую пару, которая повторила предыдущую. Но в этом подходе последовательные выборы разных '