2010-10-21 2 views
6

Немного новичок в javascript. Этот вопрос может показаться немного слишком глупо, но я не в состоянии понять это , почему следующее не работает в IE и работает в Firefox ..Onclick in select не работает в IE

<select multiple="multiple"> 
<option value="tx" onClick="alert('tx');">Texas</option> 
<option value="ak" onClick="alert('ak');">Alaska</option> 
<option value="ca" onClick="alert('ca');">California</option> 
<option value="ws" onClick="alert('ws');">Washington</option> 
<option value="tn" onClick="alert('tn');">Tennessee</option> 
</select> 

Оповещение не появляется в IE (я использую IE8). Но он работает в firefox !!!!!

+0

Это не имеет никакого отношения к jQuery. – SLaks

+0

Возможный дубликат [Назначить click() дочернему элементу управления в jquery] (http://stackoverflow.com/questions/3970564/assign-click-to-a-child-control-in-jquery) – Fermin

+0

Прошу прощения Я поставил неправильный заголовок. Его простой элемент выбора html и javascript, чтобы вызвать событие click, которое не работает, т.е. – chuckyCheese

ответ

6

According to w3schools, тег опции поддерживает атрибут onclick. Я пробовал с дном ствола IE6, и это, похоже, не так.

Самый простой способ сделать это было бы:

<select multiple="multiple" onchange="alert(this.value);"> 
<option value="tx">Texas</option> 
<option value="ak">Alaska</option> 
<option value="ca">California</option> 
<option value="ws">Washington</option> 
<option value="tn">Tennessee</option> 
</select> 

Это не совсем то, что вы после этого, но они должны быть очень близки.

редактирует

Было бы просто взять больше работы:

<select multiple="multiple" onchange=" 
    switch (this.value){ 
     case 'tx': funcOne(); break; 
     case 'ak': funcTwo(); break; 
     etc... 
    } 
"> 
<option value="tx">Texas</option> 
<option value="ak">Alaska</option> 
<option value="ca">California</option> 
<option value="ws">Washington</option> 
<option value="tn">Tennessee</option> 
</select> 

На этом этапе было бы целесообразно, чтобы обернуть OnChange в функцию в файле JS вместо встраивания его в HTML ,

+0

Спасибо, Марк, это выглядит лучше. Но что, если мне нужно назначить разные функции для разных опций? Я не могу сделать эту работу правильно? – chuckyCheese

+0

@ Rocky, см. Правки выше. – Mark

+0

Большое спасибо. Это должно сделать это, я думаю – chuckyCheese

2

Это связано с тем, что IE не регистрирует событие щелчка при выборе новой опции в поле выбора (угадывание). Вместо этого следует использовать событие ONBLUR (и поместить код в JavaScript, а), как так (при условии, JQuery):

<script type='text/javascript'> 
    $(document).ready(function(){ 
    $('select#state').bind('blur', function(){ 
     alert(this.val()); 
    }); 
    }); 
</script> 

<select id='state' multiple="multiple"> 
    <option value="tx">Texas</option> 
    <option value="ak">Alaska</option> 
    <option value="ca">California</option> 
    <option value="ws">Washington</option> 
    <option value="tn">Tennessee</option> 
</select> 
+0

Прошу прощения, я ввел вопрос неправильно. У меня вообще нет jquery. Сочетание простого javascript и html select .. Есть ли способ заставить его работать в IE? – chuckyCheese

+0

Понял, ответ Робусто - это самое прямое, правильное, прямое решение для JavaScript, которое вы отправили. –

5

Я хотел бы использовать OnChange событие:

<select multiple="multiple" onchange="alert(this.options[this.selectedIndex].value)"> 
<option value="tx">Texas</option> 
<option value="ak">Alaska</option> 
<option value="ca">California</option> 
<option value="ws">Washington</option> 
<option value="tn">Tennessee</option> 
</select> 

Хотя решение Daniel Менделя отлично.

+0

Его отлично, когда у меня есть одна функция для вызова. Но что, если мне нужно назначить разные функции для разных опций? – chuckyCheese

+0

Это то, что сказал selectedIndex. Вы можете получить фактический элемент опции из этого и сделать с ним что-то другое * в пределах одной и той же функции *. Это особенность, а не недостаток. Для простоты (и следуя вашему примеру) я помещаю весь обработчик в атрибут прослушивателя событий, но на самом деле вы просто передадите «это» внешней функции. Или используйте jQuery и назначьте ему литерал функции. – Robusto

+0

изменение не срабатывает до тех пор, пока выбор не теряет фокус, некоторые браузеры срабатывают, когда вы выбираете стрелки вверх/вниз. –

Смежные вопросы