これは確かにFirefoxのバグであり、選択されたインデックスが定義されていない場合に、アイテムにカーソルを合わせると選択された値と選択されたインデックスが割り当てられます。
バグを修正することはできませんが、非常に簡単で機能する回避策の1つは、空の非表示のアイテムをリストに追加して最初のアイテムにし、それを選択したアイテムとして割り当てることです。
例えば:
<select id="mySelect">
<option value="" style="display: none;"></option>
<option value="1">first</option>
<option value="2">second</option>
</select>
ユーザーには変更が表示されないため、選択を「クリア」するときに、選択したインデックスを-1ではなく0に割り当てます。
var oDDL = document.getElementById("mySelect");
oDDL.selectedIndex = 0;
ライブテストケース-Firefoxでも正しく動作するようになりました。
更新-上記のコードは、最初の空のオプションがまだ表示されているため、IE8では正しく機能していません。これを解決するには、ブラウザがFirefoxでない場合に、それをサポートするすべてのブラウザでオプションを削除するだけで済みます。更新されるコードは次のとおりです。
navigator.sayswho = (function(){
var N = navigator.appName, ua= navigator.userAgent, tem;
var M = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
if (M && (tem = ua.match(/version\/([\.\d]+)/i)) != null) M[2] = tem[1];
M = M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
return M;
})();
window.onload = function() {
var oDDL = document.getElementById("mySelect");
oDDL.selectedIndex = 0;
var blnFirefox = (navigator.sayswho[0].toLowerCase().indexOf("firefox") >= 0);
if (!blnFirefox && oDDL.remove) {
oDDL.remove(0);
oDDL.selectedIndex = -1;
}
oDDL.onchange = function() {
alert("hello");
};
};
ブラウザを識別する機能は、この回答から取得されました。
更新されたフィドル-Firefox、Chrome、IE9、IE8で動作します。