Нажмите событие на элемент выбора выбора в Chrome - PullRequest
59 голосов
/ 10 сентября 2009

У меня проблема в Chrome со следующим:

var items = $("option", obj);  

items.each(function(){

    $(this).click(function(){

        // alert("test");
        process($(this).html());
        return false;
    });
});

Событие click, похоже, не срабатывает в Chrome, но работает в Firefox.

Я хочу иметь возможность click на элементе option из комбо, если вместо этого я сделаю элемент другого типа, скажем, <li>, он работает нормально. Есть идеи? Спасибо.

Ответы [ 13 ]

78 голосов
/ 10 сентября 2009

Я не верю, что событие click действует в опциях. Это действительно, однако, на избранных элементах. Попробуйте это:

$("select#yourSelect").change(function(){
    process($(this).children(":selected").html());
});
21 голосов
/ 30 марта 2012

Мы можем достичь этого другим путем, несмотря на прямое вызов события с <select>.

JS часть:

$("#sort").change(function(){

    alert('Selected value: ' + $(this).val());
});

HTML часть:

<select id="sort">
    <option value="1">View All</option>
    <option value="2">Ready for Review</option>
    <option value="3">Registration Date</option>
    <option value="4">Last Modified</option>
    <option value="5">Ranking</option>
    <option value="6">Reviewed</option>
</select>
8 голосов
/ 19 августа 2016

Простой способ изменить выбор и обновить его следующим образом.

// BY id
$('#select_element_selector').val('value').change();

другой пример:

//By tag
$('[name=selectxD]').val('value').change();

другой пример:

$("#select_element_selector").val('value').trigger('chosen:updated');
5 голосов
/ 22 января 2015

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

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

       //your code here

}));
4 голосов
/ 10 сентября 2015

У меня была симилиарная проблема. Событие change не было для меня хорошим, потому что мне нужно было обновить некоторые данные, когда пользователь нажимает option. После нескольких испытаний у меня есть это решение:

$('select').on('click',function(ev){
    if(ev.offsetY < 0){
      //user click on option  
    }else{
      //dropdown is shown
    }
});

Я согласен, что это очень уродливо, и вы должны придерживаться события change там, где можете, но это решило мою проблему.

3 голосов
/ 03 декабря 2014
<select id="myselect">
    <option value="0">sometext</option>
    <option value="2">Ready for Review</option>
    <option value="3">Registration Date</option>
</select>

$('#myselect').change(function() {
    if($('#myselect option:selected').val() == 0) {
    ...
    }
    else {
    ...
    }
});
1 голос
/ 14 апреля 2018

Я использую решение из двух частей

  • Часть 1 - Зарегистрируйте мои события нажатия на опции, как обычно
  • Часть 2. Обнаружение того, что выбранный элемент изменился, и вызов обработчик нового выбранного элемента.

HTML

<select id="sneaky-select">
  <option id="select-item-1">Hello</option>
  <option id="select-item-2">World</option>
</select>

JS

$("#select-item-1").click(function () { alert('hello') });
$("#select-item-2").click(function () { alert('world') });

$("#sneaky-select").change(function ()
{
   $("#sneaky-select option:selected").click();
});
1 голос
/ 25 октября 2014

Возможно, одна из новых версий jquery поддерживает событие click для параметров. У меня это сработало:

$(document).on("click","select option",function() {
  console.log("nice to meet you, console ;-)");
});

ОБНОВЛЕНИЕ: Возможный вариант использования может быть следующим: пользователь отправляет html-форму, а значения вставляются в базу данных. Однако одно или несколько значений установлены по умолчанию, и вы помечаете эти автоматические записи. Вы также показываете пользователю, что его запись генерируется автоматически, но если он подтвердит запись, нажав на уже выбранную опцию, вы измените флаг в базе данных. Редкий иск, но возможно ...

0 голосов
/ 16 февраля 2018

Глядя на это в 2018 году. Событие щелчка по тегу параметра внутри тега выбора не запускается в Chrome.

Используйте событие изменения и сохраните выбранную опцию:

$(document).delegate("select", "change", function() {
    //capture the option
    var $target = $("option:selected",$(this));
});

Помните, что $ target может быть набором объектов, если тег select кратен.

0 голосов
/ 24 февраля 2017

Временное решение:

$('#select_id').on('change', (function() { $(this).children(':selected').trigger('click'); }));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...