• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[SCRIPTSUCHE] Erweitertes <select> gesucht

Code:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <script type="text/javascript" src="jquery.js"></script>
  <title>Test select</title>
</head>
<body>

<div id="prio_select_id" style="width:100%;border:1px solid red;"></div>

<script>
  "use strict";
  function prio_select()
  {
    var data = {
      div:  'prio_select_id',
      prio: [
        {
          val:  1,
          kurz: 'Test 1',
          lang: 'Test 1 laaaaaaaaaaaaaaaaaaang geschrieben'
        },
        {
          val:  2,
          kurz: 'Test 2',
          lang: 'Test 2 laaaaaaaaaaaaaaaaaaang geschrieben'
        },
        {
          val:  3,
          kurz: 'Test 3',
          lang: 'Test 3 laaaaaaaaaaaaaaaaaaang geschrieben'
        },
        {
          val:  4,
          kurz: 'Test 4',
          lang: 'Test 4 laaaaaaaaaaaaaaaaaaang geschrieben'
        },
        {
          val:  5,
          kurz: 'Test 5',
          lang: 'Test 5 laaaaaaaaaaaaaaaaaaang geschrieben'
        },
        {
          val:  6,
          kurz: 'Test 6',
          lang: 'Test 6 laaaaaaaaaaaaaaaaaaang geschrieben'
        }
      ]
    };
    var toggle = function(data, kurz_lang, e)
    {
      $(this).off("mouseleave click");
      if (e.relatedTarget || e.type == "click")
      {
        this.hide(70, function()
        {
          data.prio.forEach(function(ref)
          {
            ref.opt.innerHTML = ref[kurz_lang];
          });
        }).show(70, function()
        {
          data.stand = kurz_lang;
          switch (kurz_lang)
          {
          case "kurz":
            $(this).one("mouseenter", $.proxy(toggle, $(this), data, 'lang'));
            break;
          case "lang":
            $(this).on("mouseleave", $.proxy(toggle, $(this), data, 'kurz'));
            break;
          }
        });
      }
      else
      {
        $(this).on("mouseleave", $.proxy(toggle, $(this), data, 'kurz')).on("click", $.proxy(toggle, $(this), data, 'kurz'));
      }
    };

    var zielobj = document.getElementById(data['div']);
    var sel = document.createElement('select');
    data['prio'].forEach(function(ref) {
      ref['opt'] = new Option(ref['kurz'],ref['val']);
      ref['opt'].innerHTML = ref['kurz'];
      sel.appendChild(ref['opt']);
    });
    zielobj.appendChild(sel);

    data['stand'] = 'kurz';
    $(sel).one("mouseenter", $.proxy(toggle, $(sel), data, 'lang'));
  }
  prio_select();
</script>

</body>
</html>
 
Schon ziemlich geil, hesst! Klasse!
Edit fiddle - JSFiddle

Hätte noch zwei Kleinigkeiten: zum einen dieses nach links klacken bevor sich die Größe ändert hätte ich gern raus. Und es wäre cool, wenn es in einer Tabelle sich über die rechte Nachbarzelle drüber legen würde anstatt sie zu verschieben.
HTML:
<table>
    <tr>
        <td id="prio_select_id" style="border:1px solid red;"></td>
        <td>Nachbarzelle</td>
    </tr>
</table>
 
Und es wäre cool, wenn es in einer Tabelle sich über die rechte Nachbarzelle drüber legen würde anstatt sie zu verschieben.
das geht nur mit position. gib der td mit der select ne feste breite und höhe und eventuell max-width. Dann kann sie sich nicht vergrößern.
mit position relative und position absolute für die select hast du was du wolltest
 
Ja, danke dir.

Isoliert ist es jetzt perfekt! Danke euch beiden.

Nur beim Einbau in die Produktivumgebung zappelt es wieder genau so rum wie ganz am Anfang. Ich weiß nicht, wo der Unterschied liegt. JQuery Version ist gleich, Tabelle ist gleich, JS Code ist gleich, das Objekt data ist gleich aber dennoch ist es wie bei #7 dieses Threads, als hätten wir garnicht daran gearbeitet.
Jemand ein Schuss ins Blaue?
Sonst schaue ich morgen nochmal ganz in Ruhe.
Schönen Abend allseits!
 
mikdoe schrieb:
Nur beim Einbau in die Produktivumgebung zappelt es wieder genau so rum wie ganz am Anfang.
Jquery und css sind zwar nicht mein stärken, deswegen kann ich auch nichts konstruktives zu diesen Thema beisteuern.
Jedenfalls ist das verhalten von Browser zu Browser unterschiedlich, in Chrome und Opera geht gar nix, das ist total random ob man da was auswählen kann oder nicht. Im FF und IE + Windows Safari gehts supi. Die Linux + osx und Mobile Browser hab ich nicht getestet, da müsste ich meine Workstation wieder anwerfen und da ich morgen in Urlaub fahre wird das nix.

Ich hab nur Fiddle #46 getestet.

VG
xorg1990
 
xorg1990, mit welchen Versionen genau hast du das getestet? Ich hab hier die neuesten Desktop Varianten für Windows und da ist alles einwandfrei, auch in Chrome und Opera. Also natürlich mit der Einschränkung, dass es implementiert nicht funktioniert aber das hat nichts mit dem Browser zu tun.
 
So habe mein Kurzurlaub bestens gegossenen und bin wider für die JS Welt da.;)

mikdoe schrieb:
mit welchen Versionen genau hast du das getestet?
Opera ist 27.0.1686.66 und Chrome ist Version 40.0.2214.111 m.

Das verhaltenen beider Browser ist so:
Anfangs steht da nur "Test 1" fahre ich drüber kommt "Test 1 laaaaaaaaaaaaaaaaaaang geschrieben", Nachbarzelle wird "overflowed" soweit so gut. Bei einem klick sehe ich dann erst die anderen Tests.
Möchte ich dann auf Test 2 klappt die select box zu, ich kann nix auswählen, irgendwann nach gefühlten 2 Klicks passiert dann das:
mikdoe_selectBox.png
Es ist nur noch lang. Bei erneuten versuch was auszuwählen, geht das selbe von vorne los.

Ich kann ja noch mal mit Chromium Linux testen. Muss aber jetzt erst mal wech.

Nachtrag:
Bei Chrumium ist genau das selbe, außerdem schaut das so aus:
Bildschirmfoto vom 2015-02-10 00_13_59.png
Was aber (mich) nicht stört solang die Funktionstonalität gewährleistet ist
 
Zuletzt bearbeitet:
Das ist der Link von Mephiztopheles #46.
Aber bei deinem link ist das Ergebnis das gleiche, kann in Chrome nix auswählen.
Außerdem schaut es nun so aus:
mikdoe_selectBox2.png


VG xorg1990
 
Ja, jetzt seh ich es auch. Danke dir!

Aber kann man das lösen oder eher schwierig?
@hesst hast du noch eine Idee?
 
...schwierig, ist das falsche Wort aufwendig wird es alle mal.

Mir fallen drei Dinge ein die man anders machen könnte,
1.
Jquery weg und alles zu Fuß in den Computer einstanzen.

2.
Momentan wird die größe, width anhand der Stringlänge festgelegt mache das doch über css.
bei mouseenter width 600px bei mouseleave nur 300px. Zum Beispiel.

3. <select> weg und sowas wie ein dropdown Menü machen, wäre noch ne variante.

Ansonsten weiß ich auch nicht was der Chrome da falsch macht :confused:
 
Zurück
Oben