Событие, прикрепленное к узлу Option, не вызывается - PullRequest
0 голосов
/ 14 октября 2011

У меня есть этот код

    var option = new Option(thatOption.text, thatOption.value);
    $(option).click( function(){
                //Sorry cannot reveal what is here I'll just use this so that it can be referenced
                alert("clicked");
            }
        );

    try{
        selectBox.add(option,null);
    }catch(e){
        // Stupid IE doesn't know how to follow the spec
        selectBox.add(option);
    }

Этот код работает в FF> 2 (нет FF 1 или FF 2 для тестирования), Opera (presto), Chrome (webkit) и неработать на IE.Когда я нажимаю на опцию в окне выбора, ничего не происходит.Кажется, ни одно событие не запускается просто, ничего!
Вопрос.Как я могу решить эту проблему?
Цель: (в соответствии с этим кодом) сделать предупреждение
КСТАТИ: Почему это происходит?
Дополнительное примечание: Инструменты разработчика заявляют, что ошибок нет.

1 Ответ

1 голос
/ 14 октября 2011

Почему это происходит?

Основная причина этого уже обсуждалась несколько раз на SO:

Старые версии IE просто не поддерживают click события на <option> элементах. Вместо этого вам нужно будет прослушать событие <select> change (или click):

$(selectBox).change(function () {
});

Что касается вашей конкретной задачи, чтобы alert появлялось (или ваш фактический код выполнялся) только при выборе этой опции, вы можете проверить, выбран ли option в событии change:

var option = new Option(thatOption.text, thatOption.value);

$(selectBox).change(function () {
    if ($(option).is(':selected')) {
        alert('clicked');
    }
});

Если у вас нет переменной option наготове, вы можете вместо этого протестировать со значением <select>:

$(selectBox).change(function () {
    if ($(this).val() === 'something') {
        alert();
    }
});

Также, чтобы избежать try..catch и Stupid IE doesn't know how to follow the spec, вы можете сделать просто:

$(selectBox).append(option);
...