Похоже, проблема в рендеринге выпадающих списков в IE. Если вы измените CSS на <select>
, выпадающий список сбрасывается (мерцание при первом щелчке).
Таким образом, использование события mousedown
вместо click
исправляет первые два раскрывающихся списка, но из-за дополнительного сброса в третьем раскрывающемся списке (поскольку он уже достаточно велик) прерывает собственное событие изменения IE (удаление значение down никогда не меняется независимо от того, какие параметры вы нажимаете).
Решение: при начальной загрузке страницы - не связывать события, если раскрывающийся список уже достаточно велик. Я переключил ширину на автоматический и измерил <select>
, а затем связывал события изменения ширины только тогда, когда это нужно в раскрывающихся списках, вы можете избежать событий для других раскрывающихся списков.
Вот проверенный код IE 6,7,8. FireFox работает правильно с того же самого, что и Safari.
Вы можете увидеть строку, закомментированную с исправлением IE6, эта строка, если ее удалить, вызывает исходное (неправильное) поведение в IE6. Если честно, я не уверен почему.
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
dropDownIEWidthFix = function() {
if($.browser.msie) {
$dropDown = $(this);
$dropDown.data("originalWidth", $dropDown.width());
$dropDown.data("originalCSSWidth", $dropDown.css("width"));
$dropDown.css("width", "auto");
if($dropDown.width() > $dropDown.data("originalWidth")) {
$dropDown.blur(function(e) {
$element = $(e.target);
$element.css("width", $element.data("originalCSSWidth"));
});
$dropDown.change(function(e) {
$element = $(e.target);
$element.css("width", $element.data("originalCSSWidth"));
});
$dropDown.mousedown(function(e) {
$element = $(e.target);
$element.css("width","auto");
$element.width(); //IE6 fix.
});
}
$dropDown.css("width", $dropDown.data("originalCSSWidth"));
}}
$(function() {
$("select.officeItemList").each(dropDownIEWidthFix);
});
function trackingSelectionChanged(select)
{
}
</script>
</head>
<body>
<div style="float: left; display: inline; width: 160px;">
<div class="FUNCOptionTitle">
<span style="text-align: right;">col1</span>
</div>
<div style="overflow:hidden;width:148px;">
<select class="officeItemList" style="width:148px;" onchange="trackingSelectionChanged(this);">
<option value="1">erasersdffffffffffeeefefsdfsdfsdfsdfsdfsdfsdfsdfsdfdsfsdfefesf</option>
<option value="3">pencil</option>
<option value="4">ruler</option>
<option value="5">ink</option>
<option value="7">A4 paper</option>
<option value="8">A3 paper</option>
<option value="9">erasersdffffffffffeeefefsdfsdfsdfsdfsdfsdfsdfsdfsdfdsfsdfefesf</option>
<option value="10">executive</option>
<option value="11">janitor</option>
<option value="12">developer</option>
</select>
</div>
</div>
<div style="float: left; display: inline; width: 165px;">
<div class="FUNCOptionTitle">
<span style="text-align: right;">col2</span>
</div>
<div style="overflow:hidden;width:160px;">
<select class="officeItemList" style="width:160px;" onchange="trackingSelectionChanged(this);">
<option value="3">pencil</option>
<option value="4">ruler</option>
<option value="5">ink</option>
<option value="7">A4 paper</option>
<option value="8">A3 paper</option>
<option value="9">erasersdffffffffffeeefefsdfsdfsdfsdfsdfsdfsdfsdfsdfdsfsdfefesf</option>
<option value="10">executive</option>
<option value="11">janitor</option>
<option value="12">developer</option>
</select>
</div>
</div>
<div style="float: left; display: inline; width: 165px;">
<div class="FUNCOptionTitle">
<span style="text-align: right;">col3</span>
</div>
<div style="overflow:hidden;width:160px;">
<select class="officeItemList" style="width:160px;" onchange="trackingSelectionChanged(this);">
<option value="1">eee</option>
<option value="3">pencil</option>
<option value="4">ruler</option>
<option value="5">ink</option>
<option value="7">A4 paper</option>
<option value="8">A3 paper</option>
<option value="9">ffff</option>
<option value="10">executive</option>
<option value="11">janitor</option>
</select>
</div>
</div>
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
AdjustWidth fired :<span id="counter"></span> times
<div id="event"></div>
</body>