Подтвердить что ты не робот

Onclick on option tag не работает на IE и хром

Я использую событие onclick в теге параметра для поля select

<select>
    <option onclick="check()">one</option>
    <option onclick="check()">two</option>
    <option onclick="check()">three</option>
</select>`

onclick Событие не работает на IE и Chrome, но отлично работает в firefox, здесь я не хочу использовать событие onchange на теге select bcz, он не будет вызывать событие, если пользователь снова выбирает тот же параметр

Например: первый раз пользователь выбирает "одно" раскрывающееся меню. Я открою всплывающее окно после обработки некоторого материала, который пользователь закрывает всплывающее окно, предположим, что если пользователь хочет выбрать один и тот же "один" выпадающий, это не вызовет какого-либо события. Это можно решить используя onclick event on tag, но не работает на IE и chrome

Есть ли какая-нибудь работа для этого?

4b9b3361

Ответ 1

Событие onclick для тега option не будет работать в большинстве версий IE, Safari и Chrome: ссылка

Если вы хотите вызвать событие всякий раз, когда пользователь выбирает, почему бы просто не использовать:

<select onclick="check()">
<option>one</option>
<option>two</option>
<option>three</option>

И если вы хотите сделать что-то с выбранным пользователем конкретной опцией:

<select onclick="if (typeof(this.selectedIndex) != 'undefined') check(this.selectedIndex)">
<option>one</option>
<option>two</option>
<option>three</option>

Таким образом, вы гарантированно вызываете check() тогда и только тогда, когда выбран вариант.

Редактировать: Как @user422543 указал в комментариях, это решение не будет работать в Firefox. Поэтому я задал еще один вопрос: почему Firefox по-разному реагирует на Web-компоненты и IE на событие "click" на теге "select"?

До сих пор кажется, что использование <select> не будет работать согласованно во всех браузерах. Однако, если мы имитируем меню выбора, используя библиотеку, такую как jQuery UI select menu или Chosen, чтобы создать меню выбора вместо использования <select>, событие click будет запущено для <ul> или <li> что соответствует всем браузеры, которые я тестировал.

Ответ 2

У меня есть другое предложение, это не 100%, но почти:

<select onchange="valueChanged(this.value); this.selectedindex = -1">
    <option style="display: none"></option>
    <option value="1"> 1 </option>
    <option value="2"> 2 </option>
    <option value="3"> 3 </option>
    <option value="4"> 4 </option>
</select>

Таким образом, событие будет запущено, даже если пользователь дважды выбрал одну и ту же опцию. Сцепкой является то, что IE покажет пустую опцию (она игнорирует атрибут стиля), но нажатие на нее не будет запускать событие, так как оно всегда начинается как выбранное, и поэтому выбор его не вызывает onchange...

Ответ 3

Это эмулирует событие onclick на вашем option, записывая количество кликов.

http://jsfiddle.net/yT6Y5/1/

  • Первый щелчок игнорируется (используется для расширения раскрывающегося списка),
  • Второй клик - это ваш "выбор". (Количество кликов тогда reset).

Он не поддерживает взаимодействие с клавиатурой, хотя....

О, и я использую JQuery, но вы можете сделать это с помощью чистого JS

Ответ 4

Вам просто нужно

  • поставьте script над выбором,
  • установите onclick и onblur для выбора, как показано в коде
  • и настройте функцию проверки.

Я тестировал его, и он работает:).

<script>
    selectHandler = {
        clickCount : 0,
        action : function(select)
        {
            selectHandler.clickCount++;
            if(selectHandler.clickCount%2 == 0)
            {
                selectedValue = select.options[select.selectedIndex].value;
                selectHandler.check(selectedValue);
            }
        },
        blur : function() // needed for proper behaviour
        {
            if(selectHandler.clickCount%2 != 0)
            {
                selectHandler.clickCount--;
            }
        },
        check : function(value)
        {
            // you can customize this
            alert('Changed! -> ' + value);
        }
    }

</script>
<select onclick="selectHandler.action(this)" onblur="selectHandler.blur()">
    <option value="value-1"> 1 </option>
    <option value="value-2"> 2 </option>
    <option value="value-3"> 3 </option>
    <option value="value-4"> 4 </option>
</select>

Ответ 5

Я обнаружил, что для меня работало следующее: вместо этого при использовании на клике используйте при изменении, например:

jQuery('#element select').on('change',  (function() {

   //your code here

}));

Ответ 6

Используйте function(this) в id тега select

например

<script type="application/javascript">

var timesSelectClicked = 0;

$(function() {
    $(document).on('click keypress', 'select', function (e) {
        if (timesSelectClicked == 0)
        {
            timesSelectClicked += 1;
        }
        else if (timesSelectClicked == 1)
        {
            timesSelectClicked = 0;
            prompt($('select option:selected').text());
        }
    });
});
</script>

Ответ 7

Этот код не работает в Google Chrome, но работает в Mozilla.

<select>
    <option value="2" (click)="myFunction($event)">
     <div>2</div>
    </option>

    <option value="5" (click)="myFunction($event)">
     <div>5</div>
    </option>

   <option value="10" (click)="myFunction($event)">
    <div>10</div>
  </option>

</select>

Это решение работает в Chrome и Mozilla. Я не тестировал в Safari.;

<select (change)="myFunction($event)">
    <option value="2">
     <div>2</div>
    </option>

    <option value="5">
     <div>5</div>
    </option>

   <option value="10">
    <div>10</div>
  </option>

</select>