Funkcja kontrolująca zawartości HTML-owego elementu select z użyciem jQuery (testowane na wersji 1.4.2).

Funkcja wyszukuje element select o podanym id (parametr: selectID). Kontroluje maksymalną długość znalezionego elementu (w pikselach) wykorzystując parametr selectMaxWidth oraz maksymalną ilość znaków w etykiecie elementu listy przy pomocy parametru itemMaxCharsCount. Dodatkowo dla skróconych etykiet lub pod starszymi „przeglądarkami” od Microsoftu, gdy została skrócona długość całego select-a dla wszystkich etykiet, ustawiany jest parametr title zawierający treść całej skróconej etykiety. Pojawia się on po najechaniu kursorem myszy na konkretny element.

Kod źródłowy

function controlSelectElement(selectID, selectMaxWidth, itemMaxCharsCount) {
  var select = jQuery("select#" + selectID);
  var tooLong = (select.width() > selectMaxWidth);
  if (tooLong) {
    select.width(selectMaxWidth);
  }
  jQuery("select#" + selectID + " option").each(function () {
    var item = jQuery(this).text();
    var tooManyChars = (item.length > itemMaxCharsCount);
    if (tooManyChars) {
      jQuery(this).text(item.substring(0, Math.max(1, itemMaxCharsCount - 3)) + "...");
    }
    var isShittyBrowser = (jQuery.browser.msie && jQuery.browser.version < 9);
    if (tooManyChars || (tooLong && isShittyBrowser)) {
      jQuery(this).attr("title", item);
    }
  });
}

Sposób użycia

<select id="kontrolowany_select" name="test">
  <option value="0" >Nie mam zamiaru usiąść przy stole, nad pustym talerzem, patrzeć jak wy jecie i zwać się przy tym współbiesiadnikiem. Zajęcie miejsca przy stole nie czyni ze mnie współbiesiadnika. Pobyt w Ameryce nie czyni mnie Amerykaninem.</option>
  <option value="1" >Slowa nie sa tworzone przez uczonych na uczelniach lecz przez ludzi po ulicach. Twórcy słowników najczęściej zbyt późno je wyłapuja i balsamują w porządku alfabetycznym i w wielu przypadkach, gdy nie oznaczają już tego co mieli na myśli ich autorzy.</option>
  <option value="2" >Cóż za smutna epoka, w której łatwiej jest rozbić atom niż zniszczyć przesąd, może dlatego. że idiota z dyplomem to taki sam idiota, jak przedtem – tylko z pretensjami.</option>
</select>

<script type="text/javascript">
  controlSelectElement("kontrolowany_select", 500, 100);
</script>

Demo

Ze względu na problem z dołączeniem biblioteki jQuery wewnątrz posta i prawidłowym działaniem tegoż pod IE, demo zostało przeniesione na oddzielną stronę. Można je znaleźć tutaj.