событие click для вариант не работает в IE
У меня есть несколько тегов выбора, и мне нужно написать функцию onclick его опций, потому что мне нужно получить значение последней нажатой опции, но когда я написал следующее
$("#multiple_select option").click(function()
{
var val = $(this).val();
alert(val);
});
он не работает в IE.
в чем проблема?
обновление
Мне нужно точно щелкнуть событие, потому что я уже написал функцию onclick event (demo здесь), и мне нужно исправить значение последнего измененного элемента, которое невозможно сделать без события click(я думаю)
7 ответов
не привязывайте его к опции
$("#multiple_select").click(function(){
alert("works");
});
принято отвечать:
$(document).ready(function()
{
var options = $("#supply_cities_select :selected");
var lastOption;
$("#supply_cities_select").click(function()
{
lastOption = $(this).find(':selected').not(options);
options = $(this).find(':selected');
})
});
если вы действительно хотите иметь click event
на каждом варианте, вам нужно иметь List
вместо dropdown
стиль.
для этого добавьте
$("#multiple_select").click(function(){
alert($(this).children("option:selected").val());
});
следует, что
<select id="multiple_select" size="4">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
</select>
<script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#multiple_select').click(function() {
alert($(this).val());
});
});
</script>
Окно предупреждения, в зависимости от сделанного вами выбора, показывает выбранное значение.
хорошо, вот некоторые странности IE:
используя IE, в функции события click,event.srcElement.value
дает значение последней нажатой опции.
попробуйте это:http://jsfiddle.net/Ch2DT/ (только протестировано в IE8, требуется работа, чтобы сделать его кросс-браузером)
Мне понравился ответ @Reigel (accepted), но его нужно было улучшить для использования в одном из моих проектов. В приведенном ниже коде я представляю новую функцию "findClickedOption", которая учитывает тот факт, что, возможно, пользователь повторно щелкнет уже выбранную опцию. Это все еще не учитывает CTRL-щелчок по нескольким параметрам, но для меня достаточно.
var multiselect_s=$('#ms2side__sx');
var options_s =multiselect_s.find('option:selected');
multiselect_s.live('click',function(){
var clickedOption =findClickedOption($(this), options_s);
options_s = $(this).find('option:selected');
doSomething(clickedOption);//call your own function here
});
function findClickedOption(selectbox, optionsArr){
var selectedOptions=selectbox.find('option:selected');
if(selectedOptions.size>1){
return selectedOptions.not(optionsArr);
}else{
return selectedOptions;
}
}