Twój kod zmiany opcji działa poprawnie. Wygląda na to, że IE8 nie radzi sobie z "szybkim" drugim kliknięciem przy zdarzeniu click
, ale raczej oczekuje, że będzie obsługiwany double click
.
Korzystanie poniżej mojego kodu testowego, można zauważyć, że w IE8 pisze następujące po Move Down/Up
naciśnięciu „szybki”:
Move Down Click
Move Down Double-Click
Move Down Click
Move Down Double-Click
Ale z FF/Chrome następuje drukowane:
Move Down Click
Move Down Click
Move Down Double-Click
Move Down Click
Move Down Click
Move Down Double-Click
Oto kod, którego używam do przetestowania. Nie zrobiłem żadnych testów, aby sprawdzić, czy przyczyną problemów są błędy związane z jQuery.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
</head>
<body>
<select id="list" multiple="multiple">
<option value="option1">Option 1</option>
<option value="option2">Option 2</option>
<option value="option3">Option 3</option>
</select>
<button id="mup">Move Up</button>
<button id="mdown">Move Down</button>
<script type="text/javascript">
var $DEBUG = null;
$(document).ready(function()
{
$DEBUG = $("#debug");
$DEBUG.append("Registering Events<br />");
$("#mup").click(moveUpItem);
$("#mdown").click(moveDownItem);
$("#mup").bind("dblclick", function()
{
$DEBUG.append("Move Up Double-Click<br />");
});
$("#mdown").bind("dblclick", function()
{
$DEBUG.append("Move Down Double-Click<br />");
});
});
function moveUpItem()
{
$DEBUG.append("Move Up Click<br />");
}
function moveDownItem()
{
$DEBUG.append("Move Down Click<br />");
}
</script>
<div id="debug" style="border: 1px solid red">
</div>
</body>
</html>
EDIT: mogę potwierdzić to IE8, że jest problem. Zamienić ten IE8-specyficzny kod w $ (document) .ready() Ładowarka:
// $("#mup").click(moveUpItem);
$("#mup")[0].attachEvent("onclick", moveUpItem);
// $("#mdown").click(moveDownItem);
$("#mdown")[0].attachEvent("onclick", moveUpItem);
// $("#mup").bind("dblclick", function()
$("#mup")[0].attachEvent("ondblclick", function()
{
$DEBUG.append("Move Up Double-Click<br />");
});
// $("#mdown").bind("dblclick", function()
$("#mdown")[0].attachEvent("ondblclick", function()
{
$DEBUG.append("Move Down Double-Click<br />");
});
naprawdę nie związane z pytaniem, ale można poprawić 'moveDownItem()' funkcję bezpiecznie obsłużyć wybierz pole, które pozwala na wiele wyborów przez proste odwrócenie opcje przed 'each()', tak jak '$ ($ ('# list option: selected'). get(). reverse()). each (function() {// etc ..}' –
Ładnie spotted @MickByrne – Adi