letzten selektierten Eintrag?

blubbbla

Erfahrenes Mitglied
Kann ich bei einer selectBox mit Mehrfachauswahl den letzten markierten Eintrag herausbekommen oder gibt es ein Array, wo alle markierten Einträge drinstehen?
SelectedIndex gibt mir dann immer nur den ersten markierten Eintrag zurück :mad:
 
Hi,

du kannst die Optionen der Selectgruppe von hinten nach vorne durchlaufen und jeweils prüfen, ob die aktuelle Option gewählt ist.

Beispiel: Die Routine erwartet die ID der zu testenden Selectgruppe und gibt den Index der letzten selektierten Option bzw. -1 (kein Eintrag gewählt) zurück.
Code:
function lastSelected(strID){
  var objSel = document.getElementById(strID);

  for(var i=(objSel.length-1); i>=0; i--){
    if(objSel.options[i].selected)
      return i;
  }

  return -1;
}
Ciao
Quaese
 
Deine Funktion geht, so lang man alles nach der Reihe selektiert. Wenn ich aber durcheinander mehrere Einträge markiere, wird mir trotzdem immer der erste Einrag den ich markiert habe, zurückgeliefert :-(
 
Hi,

das von dir geschilderte Problem kann ich hier nicht nachvollziehen (IE und FF).

Mit nachstehendem Dokument wird mir immer der letzte Index ausgegeben - egal, in welcher Reihenfolge ich die Optionen anwähle.
Code:
<html>
<head>
<title></title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
<!--
function lastSelected(strID){
  var objSel = document.getElementById(strID);

  for(var i=(objSel.length-1); i>=0; i--){
    if(objSel.options[i].selected)
      return i;
  }

  return -1;
}
-->
</script>
</head>
<body>
<button onclick="alert(lastSelected('selID'));">Letzter gewählter Index</button>
<select id="selID" multiple="multiple" size="7">
	<option value="1">1</option>
	<option value="2">2</option>
	<option value="3">3</option>
	<option value="4">4</option>
	<option value="5">5</option>
	<option value="6">6</option>
	<option value="7">7</option>
</select>
</body>
</html>
Ciao
Quaese
 
Gibts doch nicht, bei mir geht das einfach nicht (FF). Ich krieg immer nur (wenn ich durcheinander mehere Einträge anklicke) den ersten zurück:

C:
<select size="6" multiple class="fullsizeCenter2" onclick="checkMarkedData(this.id);" id="user_offer">
<option id="1">1 </option>
<option id="2">2 </option>
<option id="3">3 </option>
<option id="4">4 </option>
<option id="5">5 </option>
<option id="6">6</option>
<option id="7">7 </option>
</select>


function checkMarkedData(selID)
{
alert(lastSelected(selID));	
}

function lastSelected(strID){
  var objSel = document.getElementById(strID);

  for(var i=(objSel.length-1); i>=0; i--){
    if(objSel.options[i].selected)
      return i;
  }

  return -1;
}
 
Hi,

bei mir funktioniert auch dein Code korrekt. Den onclick-Event habe ich jedoch durch onchange ersetzt, damit auch der IE alles korrekt anzeigt.

Kurze Nachfrage, um auszuschliessen, dass wir nicht aneinander vorbei reden:
Du willst schon den letzten gewählten Eintrag mit dem höchsten Index in der Selectliste ermitteln, nicht den zeitlich zuletzt eingegebenen.

Ciao
Quaese
 
Hi,

mir ist keine wirklich zuverlässig funktionierende Möglichkeit bekannt, den zeitlich zuletzt gewählten Index zu ermitteln.

FF und Opera (evtl. auch weitere) bieten die Möglichkeit, den onclick-Event für ein Optionselement zu definieren. Somit ist es möglich, den Index der zuletzt gewählten Option einer Variablen oder einem Array zu übergeben.
Problematisch wird es, wenn z.B. bei einer Mehrfachauswahl das zuletzt angewählte Element wieder deaktiviert wird.

Der IE weigert sich allerdings, das onclick-Event bei Optionselementen auszulösen. Dieser Event ist für das option-Objekt laut MSDN auch nicht vorgesehen.

Für den IE wäre, wie sicherich in deinem anderen Post angedacht, ein Vergleich von Arrays möglich. Allerdings wäre diese Methode sehr unzuverlässig, da eine Mehrfachauswahl durch Halten der Umschalttaste oder das Entfernen einer Auswahl nicht oder eventuell nur mit grossem Aufwand berücksichtigt werden könnten.

Vielleicht hat aber jemand anderes eine passende Lösung - würde mich auch interessieren.


Ciao
Quaese
 

Neue Beiträge

Zurück