Ich frag mich warum ich diesen Artikel nicht schon viel früher geschrieben habe. Ich habe diese Probleme schon viele Male gelesen und immer wieder musste ich selbst suchen wo das Problem liegt. Ich habe also oft genug selbst mit diesen Problemen zu kämpfen gehabt und habe wertvolle Lebenszeit damit verschwendet, Bugs zu finden, die keine waren.
Deshalb habe ich hier mal die Liste der größten und am schwersten zu findesten IE Bugs beim programmieren von Javascript, zusammengestellt.
Firefox hat seit Urzeiten Probleme mit dem setzten des focus auf ein Textfeld in bestimmten Fällen. Einmal wenn der Fokus unmittelbar nach einem onblur Event gesetzt werden soll oder wenn vor dem Fokus ein alert() Fenster geöffnet wird.
Die Lösung, die in obigen Artikel beschrieben wird, autocomplete zu deaktivieren, funktioniert zumindest in der 2'er Version nicht mehr. Die einzige Lösung scheint zu sein, unmittelbar nach einem blur Event oder alert() Fenster den focus wieder auf ein Feld zu setzen, ist ein Timeout abzuwarten. Dazu reicht ein Timeout von einer Millisekunde.
Beispiel
javascript
function setFocus(el){
var self = el;
if(el.value)return;
alert('Kein Text!');
window.setTimeout(function(){ self.focus();}, 1);
}
Beschreibung
Beim verlassen der Felder wird geprüft ob ein Text eingeben wurde. Ist es leer, erscheint eine Meldung. Nach dem wegklicken des Meldungsfensters soll das Eingabefeld den Fokus erhalten. Im ersten Fall nach einem kurzen Timeout, im zweiten ohne
Ich hab mal wieder ein altes Stück Code ausgegraben, was vielleicht für den einen oder anderen nützlich sein könnte. Die Frage ist, wie kann man ein Array mischen? Ich verwende hier wieder Array.prototype um das Array Objekt um die Methode shuffle() zu erweitern.
[... weiterlesen]
Wird mal wieder Zeit für ein bisschen Javascript. Da ständig Lösungen von Fragen in Foren bei mir auflaufen, hier eine, um die GET Parameter mit Javascript abzufragen.
Folgende Funktion selektiert alle Einträge, in allen Formularen einer Seite. Der praktische Nutzen mag gering sein, aber hier geht es nur um die Umsetzung der Fragestellung, die in der entsprechenden Anwendung jeweils angepaß?t werden muss.
Text an der Cursorposition einfügen können nur der IE ab Version 5 und Mozilla Browser. Opera bleibt aussen vor. Wie es bei Mac und Linux Browsern aussieht, weiß ich nicht.
Mit dem Skript, können z.b. BBCode Tags eingefügt werden oder Smilies. Das Skript sieht so aus:
Doppelte Einträge in einem Array lassen sich am effektivsten über ein Objekt entfernen. Der Trick dabei ist, das ein Objektattribut nicht doppelt vorkommen kann und somit ist ein Attribut, dass mehrmals zugewiesen wird nur einmal vorhanden.
Die Umsetzung erfolgt über Array.prototype dann läßt sich diese Funktion auf jedes Array anwenden.
Der Code sieht folgendermaßen aus:
javascript
Array.prototype.unique = function(){
var o = {};
var tmp = [];
for(var i = 0 ; i < this.length; i++) o[this[i]] = true;
Ja, das geht, wenn man die URL eines Bildes auf dem Server kennt. Dazu kann man den onload bzw. onerror Eventhandler des Image Objektes benutzen, die Funktion könnte so aussehen:
javascript
function check(url){
if(!url || !document.images)return
var img = new Image();
img.onload = function(){
alert('Das Bild konnte geladen werden der Server ist online!');
Mit Hilfe von Math.random() wird bei jedem Aufruf eine neue URL erstellt, damit die Datei immer vom Server geholt wird und nicht aus dem Cache des Browsers.
Es läßt sich aber auch direkt in ein Bild im HTML Code integrieren, z.b. so:
Um ein Datum auf Gültigkeit zu prüfen muss die Eingabe zuerst zerlegt werden.
Die Funktion string2date() geht von der typisch deutschen Form TT.MM.JJJJ aus, wobei die Trennzeichen auch ein Minuszeichen oder Schrägstrich sein können.
Die Eingabe wird an den Trennzeichen gesplittet und daraus dann ein Date() Objekt erstellt. Als nächstes wird der Tag, Monat und das Jahr mit der Eingabe verglichen, stimmen alle Werte überein, wird das Date Objekt zurückgegeben, wenn nicht null
Die Funktion stripHTML() löscht alle HTML Tags in einem String.
Die Funktion stripHTML() wurde am 21.7.2010 überarbeitetet. Sie ist nun in der Lage auch mit HTML Tags umzugehen, die HTML Zeichen in den Attributen haben. Also z.b. so etwas: <p title="Ich bin kleiner < als der größere >">, was in der vorherigen Version nicht möglich war, wie schon Christoph in den Kommentaren schrieb.
javascript
function stripHTML(str){
// remove all string within tags
var tmp = str.replace(/(<.*['"])([^'"]*)(['"]>)/g,
function(x, p1, p2, p3){return p1 + p3;}
);
// now remove the tags
return tmp.replace(/<\/?[^>]+>/gi, '');
};
stripHTML() in der Version vom 21.7.2010
Die Funktion trim() löscht alle Zeilenumbrüche, Leerzeichen am Anfang und Ende und doppelten Leerzeichen.