Събитието за кликване не работи върху маркера за опция за избор на html в браузъра chrome

Искам да задействам събитие за щракване (не събитие за промяна) върху маркери за избрани опции. Събитието за кликване върху маркера за избор на опция работи само във firefox, но не и в google chrome. Прекарах много време, за да разреша този проблем, но все още не успях. Всеки може да ми помогне да разреша този проблем. Благодаря предварително.


person Ahmar Arshad    schedule 30.09.2015    source източник
comment
Звучи като проблем с XY, защо не можете да използвате събитие change? И да, в chrome не можете да обвържете никакво събитие на мишката към option елемента   -  person A. Wolff    schedule 30.09.2015
comment
Имам множество падащи менюта и видео контейнер. При избор на опция трябва да покажа видео, свързано с избраната опция във видео контейнер. Сега, ако избера опция от първото падащо меню за избор, тогава видеоклипът ще бъде показан във видео контейнер и след това избера опция от второто падащо меню, след което видеоклипът ще бъде променен. Сега, ако се върна към първата опция и щракна върху вече избрана опция, за да гледам видеоклипа й, тук събитието за промяна няма да работи.   -  person Ahmar Arshad    schedule 30.09.2015


Отговори (1)


Опитайте да редактирате функцията onclick на маркера select, за да извикате onclick на маркера option. Проблемът сега е, че може да се обади два пъти във FireFox.

function getSelectedOption(select) {
    return select.options[select.selectedIndex];
}

За да видите в действие ->

<select onclick='getSelectedOption(this).click()'>
  <option onclick='log("foo")' >foo</option>
  <option onclick='log("bar")' >bar</option>
</select>

<p id="display"></p>

<script> 
function log(text) {
  document.getElementById('display').innerHTML = text;
}

function getSelectedOption(select) {
   return select.options[select.selectedIndex];
}
</script>

Освен това проблемът с това е, че onclick се задейства веднъж за щракване върху опцията и друг за избор (след това firefox идва за друг). И така, най-добрият начин, който открих да коригирам това, е да го променя на onchange за маркера select.

Но за съжаление това премахва само първоначалното щракване, а не правилния начин на щракване на FireFox...


Така че, ако променим нашата функция getSelectedOption, за да проверим дали браузърът е хром, тогава можем да се покрием!

var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;

Нашата нова функция може да изглежда по следния начин...

clickSelectedOption(select) {
    if(!is_chrome) return;
    select.options[select.selectedIndex].click();
}

Смесете всичко заедно!

<select onchange='clickSelectedOption(this)'>
 <option onclick='log("foo")' >foo</option>
 <option onclick='log("bar")' >bar</option>
</select>

<p id="display"></p>

<script>
  var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
         
  function log(text) {
    document.getElementById('display').innerHTML = text;
  }

  function clickSelectedOption(select) {
    if(!is_chrome) return;
       select.options[select.selectedIndex].click();
  }
</script>

person tkellehe    schedule 06.11.2015
comment
Ти ми спаси деня - person Sagar Gautam; 06.02.2019