blog.bartlweb - a technologist's external brain

Thema: Webentwicklung

vorbelegtes Eingabefeld bei Focus automatisch leeren

Gerade bei Suchfeldern ist das Eingabefeld gerne mit dem Wort "Suchen" vorbefüllt. Damit beim Klicken in das Feld der Text automatisch verschwindet bzw. beim Verlassen wieder hergestellt wird und dabei der Text auch noch direkt aus dem HTML-Code ausgelesen wird gibt es folgendes Code-Snippet:

inputtext = $("input#search").val();
jQuery("input#search").focus(function() {
if(this.value==inputtext) this.value='';
});
jQuery("input#search").blur(function() {
if(this.value=='') this.value=inputtext;
});

Browser und Betriebssystem per JavaScript ermitteln

Oft werden für verschiedene Browser unterschiedliche JS-Befehle benötigt oder es muss unterschiedlich viel mit JS realisiert werden, hier hilft das Skript "Browser detect" mit dem sich nicht nur Browser-Typ und Version abfragen lassen, sondern auch noch das verwendete Betriebssystem.

Anwendung

  • Initialisieren
    BrowserDetect.init();
  • Browser-Typ abfragen
    BrowserDetect.browser
  • Browser-Version abfragen
    BrowserDetect.version
  • Betriebssystem abfrage
    BrowserDetect.OS

Rückgabewerte

  • Browser
    OmniWeb, Safari, Opera, iCab, Konqueror, Firefox, Camino, Netscape, Explorer, Mozilla
  • Version
    z.B.: 6 oder 7 für IE6 bzw. IE7
  • OS
    Windows, Mac, Linux

Skript

Zu finden ist das Skript sammt umfangreicher Dokumentation unter: http://www.quirksmode.org/js/detect.html

Status einer Checkbox mit jQuery ermitteln

Am einfachsten lassen sich Checkboxen in jQuery mit der Abfrage bzw. dem Schreiben des Attributes checked behandeln (checked="" bzw. checked="checked"). Diese Schreibweise ist außerdem xHTML konform.

if( jQuery("#checkbox").attr("checked") ) {
  ...
}
jQuery("#checkbox").attr("checked", "checked");

Die selbe Vorgehensweise funktioniert übrigens auch mit Select-Optionen und selected="" bzw. selected="selected".

PopUp Parser mit jQuery

PopUps sind generell eine eher lästige Sache, gerade in Applikationen aber manchmal erwünscht. Generell lassen sich PopUps nur per JavaScript öffnen. Damit unsere Webseite aber auch ohne JavaScript funktionstüchtig wird ist es sinnvoll den PopUp-Aufruf erst mittels JavaScript zuzuweisen.

Das folgende Snippet fügt allen Links mit der Klasse "popup_link" den benötigten Funktion hinzu:

$(".popup_link").click(function(){
  fenster = window.open(this.href, "popup", "width=550,height=500,status=no,scrollbars=yes,resizable=yes");
  fenster.focus();
  return false;
});

Alle externen Links automatisch in neuem Fenster öffnen

Externe Links möchte man meistens in einem neuen Fenster öffnen. Gerade bei Systemen mit Redakteuren wird das Setzen des entspechenden target-Attributes aber gerne vergessen. Das untere JavaScript fügt allen absoluten Links das Attribut target="_blank" hinzu. Achtung: interne Links müssen daher immer relativ angegben werden.

jQuery("a").each(function () {
  if ( jQuery(this).attr("href").indexOf("http://") == 0 || jQuery(this).attr("href").indexOf("https://") == 0 ) {
    jQuery(this).attr("target","_blank");
  }
});

Karte von GoogleMaps wird nicht vollständig geladen

Wenn bei GoogleMaps die Karte nicht vollständig geladen wird und immer wieder Quadrate der Karte fehlen, kann eine mögliche Lösung die Angabe einer absoluten Größen beim erzeugen der Map sein. Dazu muss das erzeugende JavaScript modifiziert werden, der Aufruf könnte dann wie folgt aussehen:

var map = new GMap2(document.getElementById("map"),{size : {width:575,height:500}, mapTypes : [G_NORMAL_MAP,G_HYBRID_MAP,G_SATELLITE_MAP]});

jQuery Event binding/unbinding und das Konzept der Namespaces

jQuery bietet eine sehr einfache Möglichkeit Events auf HTML-Elemente zu binden und wieder zu entfernen. Zusätzlich bietet jQuery das Konzept von Namespaces um Events besser verwalten zu können.

binding Events

jQuery(".class").click(function(){ ... });

oder

jQuery(".class").bind('click', function(){ ... });

unbinding Event

jQuery(".class").unbind();  // alle events entfernen

oder

jQuery(".class").unbind('click'); // nur click-Events entfernen

oder

jQuery(".class").unbind('click', function(){ ... });

Namespaces

Da bei den oben beschriebenen Methoden aber alle Events die entsprechenden Elementen zugeordnet sind entfernet werden und nicht nur die eigenen bietet jQuery das konzept der Namespaces an. Dadurch sind Events eindeutig identifizierbar und es können somit auch nur die eigenen Events entfernt werden.

Html-Elemente mittels JavaScript neu rendern

Gerade bei Darstellungsfehlern nach dem Scrollen oder Ein- und Ausblenden von Elementen, verursacht durch ein verabseumtes Neurendern durch den Browser (vor allem in IE6), ist es hilfreich diese Elemente per JS neu rendern zu lassen. Um das Neurendern eines Elements mittels JS zu erzwingen, muss diesem Element eine temporäre Fake-Klassen hinzugefügt werden. Diese Klassen müssen nicht existieren und dienen nur als Anstoß für den Browser.

Hintergrund: Eine Klasse entfernen erzwingt nicht immer ein komplettes neurendern des Elementes, wird allerdings eine Klasse hinzugefügt wird das Elemente neu gerendert, auch wenn die Klasse keine Definitionen besitzt.

InternetExplorer per JavaScript ermitteln

Des öfteren ist es leider notwendig für InternetExplorer 6 und 7 eigenes JavaScript zu schreiben. Die folgende Browserabfrage, basierend auf jQuery, ermittelt zuverlässig die eingesetzte Version.

IE 6 ermitteln

if (jQuery.browser.msie && /6.0/.test(navigator.userAgent)) {
  alert('browser is ie6');
}

IE 7 ermitteln

if (jQuery.browser.msie && /7.0/.test(navigator.userAgent)) {
   alert('browser is ie7');
}

iFrame Größe dem Inhalt anpassen

Gerade in Webapplikationen ist hin und wieder der Gebrauch von iFrames unumgänglich. Das folgende JS-Snippet passt dabei die Höhe des iFrames beim Laden der Seite automatisch dessen Inhalt an. Somit wird der Gebrauch von iFrames für den Benutzer unsichtbar.

jQuery("iframe").load(function() {
   this.style.height = this.contentWindow.document.body.offsetHeight + 'px';
});