51

(1 Antworten, geschrieben in JavaScript - Hilfe)

Moin,

falls keinerlei Verschachtelungen der Begrenzer vorkommen,
kannst Du's so machen:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>translit</title>
<meta http-equiv='content-type' content='text/html; charset=iso-8859-1'>
<script type='text/javascript'>

var lit_eng = [ /sh/g, /sch/g, /bI/g, /ya/g, /ja/g, /zh/g, /ch/g, /ye/g,
                /je/g, /yu/g,  /ju/g, /yo/g, /jo/g, /y/g,  /j/g,  /u/g,
                /k/g,  /e/g,   /n/g,  /g/g,  /z/g,  /h/g,  /~/g,  /f/g,
                /v/g,  /a/g,   /p/g,  /r/g,  /o/g,  /l/g,  /d/g,  /e/g,
                /s/g,  /m/g,   /i/g,  /t/g,  /'/g,  /b/g,  /c/g,
                /SH/g, /SCH/g, /bI/g, /YA/g, /JA/g, /ZH/g, /CH/g, /YE/g,
                /JE/g, /YU/g,  /JU/g, /YO/g, /JO/g, /Y/g,  /J/g,  /U/g,
                /K/g,  /E/g,   /N/g,  /G/g,  /Z/g,  /H/g,  /~/g,  /F/g,
                /V/g,  /A/g,   /P/g,  /R/g,  /O/g,  /L/g,  /D/g,  /E/g,
                /S/g,  /M/g,   /I/g,  /T/g,  /'/g,  /B/g,  /C/g
              ],
    lit_rus = [ 'ø',   'ù',    'û',   'ÿ',   'ÿ',   'æ',   '÷',   'å',
                'å',   'þ',    'þ',   '¸',   '¸',   'é',   'é',   'ó',
                'ê',   'å',    'í',   'ã',   'ç',   'õ',   'ú',   'ô',
                'â',   'à',    'ï',   'ð',   'î',   'ë',   'ä',   'ý',
                'ñ',   'ì',    'è',   'ò',   'ü',   'á',   'ö',
                'Ø',   'Ù',    'Û',   'ß',   'ß',   'Æ',   '×',   'Å',
                'Å',   'Þ',    'Þ',   '¨',   '¨',   'É',   'É',   'Ó',
                'Ê',   'Å',    'Í',   'Ã',   'Ç',   'Õ',   'Ú',   'Ô',
                'Â',   'À',    'Ï',   'Ð',   'Î',   'Ë',   'Ä',   'Ý',
                'Ñ',   'Ì',    'È',   'Ò',   'Ü',   'Á',   'Ö'
              ];

function translit( x, y, z )
{ with ( x )
  { var c, i = 0, m = /[[^][]*]|:[^:]*:/g, M = value.match( m ), r = ' b b ';

    value = value.replace( m,  r );

    for ( c in y ) value = value.replace( y[c], z[c] );

    if ( M ) while ( M[i] ) value = value.replace( r, M[i++] );
  };
};

onload = function(){document.send.newcomment.value =
                    ' jeyujusmit'   shSHSCHsch n:jeyujusmit': [shSHSCHsch]nbITESTzwodryfear'
                   };

</script>
</head>
<body>
<form name='send' action='#'>
<textarea name='newcomment' cols='30' rows='20'></textarea>
<br />
<input type='button' value='translit' onclick='translit(this.form.newcomment, lit_eng, lit_rus)' />
</form>
</body>
</html>

gruß

matho

52

(3 Antworten, geschrieben in JavaScript - Hilfe)

Das ist aber mal eine schöne Frage, und ich bin ja so froh, daß
Du diese Frage gerade mir stellst.
Leider verstehe ich sich sie nicht so richtig, das liegt aber
wahrscheinlich bloß daran, daß da irgendwo Satzzeichen fehlen,
oder so.
Ich vermute mal, Du hast ein Fragezeichen vergessen, und es sollte
heißen: "Wie stelle ich ein das?".
Das kommt jetzt ganz drauf an, ob Du eher ein Feng-Shui-Anhänger
bist (vielleicht hast Du ja sogar einen Feng-Shui-Anhänger, und
vielleichtvielleicht sogarsogar einen mit Kupplung), oder aber
der Neuen Wiener Schule den Vorrang gibst.
Sollte ersteres der Fall sein, geb' ich Dir einen guten (um nicht
zu sagen: lebenswichtigen(!)) Tip: Auf keinen Fall neben's Fenster,
sonst geht nämlich die Welt unter. Am besten auf's Klo, und vergiß
nicht, eine rote Orchidee daneben zu stellen (Das kann sowieso nie
schaden, und außerdem verhilft's Dir mit ein bißchen Glück zu 'nem
geschmeidigen Stuhlgang).
Bist Du allerdings ein NWS-Jünger, dann suche ein hübsches, schattiges
Plätzchen in der Nähe eines älteren Laubbaumes, idealerweise einer
Ulme, aber jedenfalls an einer der Aussenwände Deiner Garage. Hier
stellst Du das das im 83-Grad-Winkel (von der hinteren, linken Ecke
aus gesehen) vorsichtig hin (Nicht fallenlassen(!!!)).
Ab und zu giessen.
Halte Dich an meine Ratschläge, und Du wirst wandeln gebenedeit unter
den Sterblichen!!!

Amen

matho

53

(11 Antworten, geschrieben in JavaScript - Hilfe)

Moin, ReAr,

es sind tatsächlich eine Reihe mehr, weil verschiedene
browser von den genannten abgeleitet sind.
In der Regel und als groben Überblick nehme ich diese
Grundauswahl zum Testen.
Eine zeitlang hatte ich zB. auch konqueror mit dabei,
das habe ich wieder sein lassen, weil damit einige Dinge,
die ich brauchte, nicht gingen.
Soetwas muß man individuell entscheiden, ich denke
inzwischen, daß man es halt nicht jedem Recht machen kann.
Grundlegend hat sich, im Vergleich zu "these old days",
nichts wesentliches geändert. Damals gab's im Großen und
Ganzen halt bloß zwo browser, und heute hast Du ein paar
mehr, auf die Du achten mußt.
Ich persönlich finde wichtig den IE und Firefox - opera
ist in meinen Augen bereits eine ziemliche Zumutung.
Aber, wie gesagt, von Fall zu Fall, von Tag zu Tag, ungefähr
so wie bei den Anonymen Alkoholikern....

gruß

matho

54

(11 Antworten, geschrieben in JavaScript - Hilfe)

N'abend, ReAr,

ok, kapiert.
Das eine hat mit dem andern nicht unmittelbar zu tun:
Auf einen style greifst Du einfach so zu

var L = document.getElementById('ID').style.left

und setzt ihn

document.getElementById('ID').style.left = '4711px'

Das war's.
Das gilt für IE, opera, mozilla, netscape > 4

gruß

matho

55

(2 Antworten, geschrieben in JavaScript - Hilfe)

Moin,

es genügt aber auch:

document.Bestellung['bezeichnung'+i].value

Das eval braucht's hier nicht.

gruß

matho

56

(11 Antworten, geschrieben in JavaScript - Hilfe)

Moin zusammen,

wozu brauchts's denn die Formulierung

...setAttribute(...)  ?

Das ist eine IE-spezifische Methode.
Wenn's unbedingt sein muß, kann man sich das natürlich
für die andern browser auch schreiben, aber, wie gefragt: wozu?

gruß

matho

57

(7 Antworten, geschrieben in JavaScript - Allgemeines)

Moin green,

"... aber mal was anderes: woher beziehst du denn deine infos über js?
einen konkreten link mit ein wenig mehr wissen als es selfhtml veröffentlicht
hast du auch noch nicht genannt.  ..."

Das ist eine ziemlich anarchische Angelegenheit. In der Hauptsache google
und Austesten (also viel selbst schreiben, schaun, was geht, usw).
Dabei gibt's durchaus verschiedne Phasen:
Anfangs, als die Begeisterung für javascript noch ziemlich gross war,
beteiligten sich (auch hier auf -heute- devshare) eine Menge guter
Leute an öffentlichen Diskussionen. Durch das Studium von deren code
beispielsweise konnte man viel - und vor allem Verschiedenartiges -
lernen. Das hat heutzutage stark nachgelassen.
Dann der Zug durch die Gemeinde: drweb, selfHtml, o'reilly, developer.netscape.com,
mailinglisten, und was nicht alles... - nicht zu vergessen die diversen
support-sites der diversen browser-Hersteller.
Alleine darüber könnte man ein Buch schreiben. Nehmen wir zB. selfHtml:
Als Einstieg und zum Immer-Mal-Nachguggen sehr hilfreich, als verlässliche
Dokumentation eher unbrauchbar, und natürlich (das bleibt bei keinerlei
Menschwerk aus) mit einer Menge zum Teil haarsträubender Fehler behaftet.
Im Umkreis von selfHtml (zB. bei Leuten, die sich auch im self-Forum rumtreiben)
findet sich aber schon entschieden feineres Wissen, das von viel Sachkenntnis
und schon beinah wissenschaftlicher Akribie kündet.

Weil javascript nun meine allererste programmiersprache war, habe ich soetwas
wie ein, sagen wir mal, sentimentales Verhältnis dazu, und ich habe natürlich
inzwischen eine Reihe Bücher darüber gelesen. Wenn ich so über die ersten
zwanzig, dreissig, die mir ungeordnet in den Kopf schiessen, nachdenke, so muß
ich sagen, daß tatsächlich fast _keines_ dabei ist, das sich etwas tiefer mit der
Sache befasst. Eine wirkliche Ausnahme ist hier das javascript-kochbuch von
Jerry Bradenbaugh bei o'reilly (isbn 3-89721-162-9), inzwischen leider
hoffnungslos veraltet, nichtsdestotrotz ein wirklicher Klassiker.

Das mag daher kommen, daß javascript im allgemeinen Bewußtsein eher als
Spielerei, bzw. bestenfalls Einsteigersprache gilt, für die zwar schon ein
paar durchaus ernsthafte Dokumentationen zur Verfügung gestellt werden, aber in
der Regel, wenn's um's Erstellen größerer Applikationen geht, eher davon ausgegangen
wird, daß mit soetwas sowieso nur "wirkliche" Programmierer befasst sind, die
eh schon wissen, was sie tun müssen, und durch Erfahrung und immenses Wissen auf
anderen Gebieten einfach durch Übertragung dieses Fremdwissens das bissel javascript
auch schon hingebogen bekommen. Mit der Zeit bilden sich so natürlich tatsächlich
Experten heran, die allerdings wenig, oder besser: keine Zeit oder Lust haben,
irgendwelchen Anfängern ein paar grundsätzliche und dann weiterführende Einspritzungen zu verabreichen.

Auch das ist wieder ein weites Feld, und Du siehst: ich komme vom hundersten ins
tausendste, und dabei hab' ich kaum angefangen.

Was jetzt aber Deine Frage nach weiterführenden links wg. oop und javascript angeht,
da muß ich leider gestehen, daß mir da nichts rechtes einfallen will, soll heißen:
So einen gut aufgebauten Lehrgang von A bis Z, und wenn's geht, noch ein bissel
über's Z raus, hab' ich bisher nicht gesehen, und den werd' ich wahrscheinlich
auch nicht sehen. Nicht in diesem Leben.

Vielleicht wär's ne nette Idee, so etwas einfach selbst zu machen.
Dazu bräuchte es aber einen Verleger, der noch an's Gute im Menschen glaubt, die
realistische Einschätzung der Verwirklichung läuft damit also asymptotisch gegen Null.

Ich bin so vermessen, manchmal zu glauben, daß hier auf devshare manchmal der
Versuch gemacht wird, so ein ganz klein wenig in diese Richtung zu arbeiten, allerdings
ist das allerallerhöchstens ein Tropfen auf den heißen Stein.
Erschwerend kommt dabei hinzu, daß just dieser Stein von vielen Leuten bestenfalls als
lauwarm empfunden wird, und das ist bereits der Gipfel der Gefühle.

Ich hätte speziell für Dich nun mehrere Alternativen:

1.) Du läßt das Bier weg, und machst einen kalten Sprung in Jerry Bradenbaugh (s Buch...)
2.) Du setzt noch eins drauf, und besorgst Dir noch paar Kästen Bier, und machst denselben
Sprung, begleitend empfehle ich ein Durchklicken der links der google-Funde zu ausgesuchten
Begriffen, denen man auf seiner Reise begegnet, mit anschließendem Durchlesen der
texte in den besuchten links (das geht dann nach dem ersten Kasten recht flüssig).
3.) Schau vielleicht vorsorglich mal hier:

http://developer.netscape.com/docs/manu … ntents.htm

Allerdings mit ein wenig Vorbehalt: Für mein Empfinden geht's hier begrifflich bissel
holprig zu, und das fördert nicht unbedingt das Verstehen, aber irgendwo muß man ja
anfangen. Spätestens hier bekommen wieder mal die allfälligen browser-Unterschiede
eine fragwürdige Wichtigkeit, aber das führt dann schon wieder woanders hin...

Jetzt wünsch Dir aber zuallererst einen schönen Urlaub!

gruß

matho

58

(7 Antworten, geschrieben in JavaScript - Allgemeines)

N'abend green,

danke für die lorbeern, allerdings weiß ich noch immer nicht sehr viel
genauer, wo's bei Dir hakt.
Daß es nicht um irgendwelche überflüssigen Grundsatzdebatten gehen kann,
darüber sind wir uns glücklicherweise einig. Ich finde sowas in den meisten Fällen
todtlangweilig, so ähnlich, wie wenn der eine sagt, Skifahrn find' er geil, und
die andre antwortet, Nasepopeln bringe die Menschheit den entscheidenden Schritt
nach vorn.
Aber es gibt - wie überall - auch hier Ausnahmen:

http://web.media.mit.edu/~lieber/Lieber … ation.html

Das ist einer der besten Aufsätze, den ich in letzter Zeit zum Unterschied
zwischen Klassen und Prototypen gelesen habe.

Natürlich geht's hier nicht um javascript im Speziellen. Ich habe so das
Gefühl, daß das auch gar nicht so sehr Dein Problem ist.

Lies' Dir das Ding mal durch, wenn Du Lust hast. Vielleicht ist da was dabei,
das Dir schon weiterhilft (Und sag doch mal Bescheid, ob's Dir auch so gut
gefällt wie mir, oder eher nicht).

gruß

matho

p.s.: Wenn Du irgendwelche konkreten Code-Schnipsel hast, an denen Du ein paar
Deiner Schwierigkeiten zeigen kannst, können wir das hier ja auch klären.

59

(7 Antworten, geschrieben in JavaScript - Allgemeines)

Moin green,

in den zwei von Dir gezeigten links findet sich doch schon eine ganze Menge.
Jetzt sagst Du:

..."  denn so langsam stoße ich mit meinen aktuellen infos (siehe frühere posts)
     an meine grenzen  ..."

Ich würde gerne verstehen, was Du damit meinst:
Gibt es irgendeine konkrete Schwierigkeit, der Du mit den Dir bisher bekannten Verfahren
nicht beikommst, oder die Du vielleicht für Deinen Geschmack nur umständlich lösen
kannst.
Oder möchtest Du eher eine umfassende Vorstellung von Konzepten bzw. Vorgehensweisen,
vielleicht kategorisiert nach möglichen Problemstellungen?

Was genau sind denn "deine Grenzen"?
Wie "arbeitest Du ein wenig mit Objekten in JavaScript" bisher?
Warum "werden einige mit dem Kopf schütteln und andere schimpfen", und, wesentlich
wichtiger: Warum "geht es Dir in der Arbeit damit nicht anders *G"?

Gerade dann, wenn ich mir "frühere posts" von Dir ansehe, gewinne ich eher den
Eindruck, daß Du durchaus in der Lage bist, Dinge zu verstehen und auch für andre
verständlich darzustellen, wenn ich das mal so salbungsvoll sagen darf.
Umsomehr tät's mich intressieren, wo nun denn _Du_ an Grenzen stösst, an denen
Deine Eigenständigkeit und Findigkeit den Geist aufgibt.

Denkbar ist ja auch, daß Du "eigentlich" bereits alles weißt, und daß Dir
lediglich dieser gewisse eine erleuchtende Gedankenblitz noch nicht gekommen ist,
der dann alles zusammen ins rechte Licht rückt (Das ist sowas, wie wenn man sagt:
"Und in diesem Moment ist es mir wie Schuppen von den Augen gefallen...").

Wenn zB. Sepp Herberger sagt: "Der Ball ist rund...", so hat er mit diesem einen,
kleinen, feinen Satz so ziemlich alles gesagt, was ein Mensch über Fußball wissen kann.
Ein andrer hält ne fünfstündige Rede zum gleichen Thema, und allen Zuhörern schlafen
die Füsse ein, und nach dem Aufwachen sind alle blöder als zuvor.

Versuch doch bitte einmal, möglichst genau und konkret zu beschreiben, was es bei Dir
mit dieser ominösen "Grenze" auf sich hat.


gruß

matho

60

(4 Antworten, geschrieben in JavaScript - Hilfe)

Moin zusammen,

"... dass ich in meinem Fall jetzt letztlich 5 verschiedene Technologien zusammenbringen muss:
MySQL, PHP, XUL, JS und CSS (mal abgesehen von PDF und was sonst noch dran hängt). Womöglich
muss noch RDF dazu, ..."

Vielleicht klingt's ein bissel banal:
Längerfristig ist es natürlich meistens gut, so viel als möglich kennengelernt zu haben,
womöglich sogar zu verstehen, und last but very not least zu beherrschen.
Aber man muß auch abwägen, ob für ein konkretes Projekt das Erlernen einer neuen Technik
die nun einmal dazu notwendige Zeit sich tatsächlich rechnet.
Das vor allem dann, wenn man alleine arbeitet, im Gegensatz zu, sagen wir mal, nem Team
von  fuffzehn Leut.

Mir ging's ähnlich wie hannes - ich hab' mal reingeschnuppert, und hatte dann die Nase
voll, was auch damit zusammenhing, daß ich für mich befriedigende Ergebnisse auch
ohne XUL hinbekommen habe. Das ist natürlich lediglich subjectiv, und selbstverständlich
auch abhängig vom aktuellen Project.

Noch etwas zu prothon:

Es wird ja immer wieder mal die Frage gestellt, wie man sich generell irgendetwas aneignen
kann. Das tutorial zu prothon ist sehr, sehr gut. Die Sprache ist exact.
Für mein Empfinden sind die Erklärungen geradezu modellhaft.

gruß

matho

Moin Rieglflo,

"... allerdings kann man den focus scheinbar nur mit focus() setzen ? ..."

Jawoll, aber Du hast auch noch "onfocus". Hiermit kannst Du definieren,
was passieren soll, wenn ein Element den focus erhält.
Folgende Zeilen hinterlassen in der Variablen "F" den Namen der
jeweils letzten textarea, die den focus hatte:

<html>
<head><title>focus</title>
<script type='text/javascript'>
var d = document,  F = null;

if( !d.layers && d.getElementsByTagName )
onload = function(){for ( var i = 0, t;
                              i < (t = d.fo.getElementsByTagName('textarea')).length;
                              i++ )
                     t[i].onfocus = function(){ F = this.name };
                   };
</script>

</head>
<body>

<form action='#' method='post' name='fo'>
 <textarea name='aut' class='button' rows='15' cols='25'></textarea>
 <textarea name='de'  class='button' rows='15' cols='25'></textarea>
 <textarea name='hol' class='button' rows='15' cols='25'></textarea> <br />
 <input type='button' name='test' value='TEST'
        onclick="alert(F);if(F)d.fo[F].value+='ich war'sn'">
</form>

</body>
</html>

gruß

matho

62

(4 Antworten, geschrieben in JavaScript - Allgemeines)

Moin, Arwen,

Dein Problem sind die Daten, die Du zu erwarten hast.
So, wie Du es formuliert hast (i += 2), macht es einen
Unterschied, ob die Anzahl der Felder grade oder ungrade ist,
und ob am Ende des gesamten Strings noch ein Semikolon kommt
oder nicht.

Vergleiche mal Dein und mein script:

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>
<html>
<head>
<title>vergleich</title>
<meta http-equiv='content-type' content='text/html; charset=iso-8859-1'>
<style type='text/css'>
body{background:#bababa;}
div{font-family:monospace;font-size:16px;}
</style>
<script type='text/javascript'>

var Str  = '1 a;2 b;3 c;4 d;5 e;6 f;7 g;8 h;9 i;10 j;11 k;12 l;',

    Str1 = '';

if( Str != null && Str != '' )
    {var Container = Str.split(';'),
                     i = 2;
     do {var Tmp      = 'Nichts'
         TmpArray = new Array(2);

         if( Container[i] != null && Container[i] != '' )
            {Tmp      = Container[i];
             TmpArray = Tmp.split(' ');
                        };
         Container[i] = TmpArray[0] + ';' + TmpArray[1];
         i += 2;
        }
     while ( i < Container.length );

     for( var i=0 ; i < Container.length; i++)
        {
          if( i < Container.length -1)
            {
               Str1 = Str1 + Container[i] + ';'
            }
          else
            {
               Str1 = Str1 + Container[i]
            }
        };

       Container = Str1.split(';');

       var PrioCheck = false;

       if( ( (Container.length - 1) / 3) > 5 )
        {
          PrioCheck = true
        }

       var Prio  = new Array();
       var Datum = new Array();
       var Land  = new Array();

       var j = 0;
       var i = 0;

       do {
         if( Container[i] == null && Container[i] == '' )  //  Du meinst wahrscheinlich
            {                                               //  statt und (&&) oder (||)
             Container[i]= ' '                              //  => alert(null == '')
            }                                               //  Deine Bedingung kann nie
         Prio[j]  = Container[i]                           //  erfüllt sein.
          Datum[j] = Container[i+1]
         Land[j]  = Container[i+2]

              i = i+3
            j++
          }
        while( i < Container.length )
        };


///////////////////////////////////////////////////////////////////////////////////////////////////

var sp = Str.split(';'),
   con = [],
     N = 'Nix',
     n = '<br />',
     P = function(p, pp, pn){ p && p.match(/S/) ? pp.push( p ) : pn ? pp.push( pn ) : 0 };

P(sp[0], con, N);
P(sp[1], con, N);

for ( var i = 2, j, a; i < sp.length; i++ )
    for ( j in a = i%2 ? [sp[i]] : sp[i].split(' ') )
        P( a[j], con );

var PrioCheck = ((con.length - 1) / 3) > 5  ? true : false,
     prio = [], dat = [], land = [];

for ( var i = 0; i < con.length; i+=3 )
          { P( con[i],   prio, ' ');  // <= möchtest Du tatsächlich,
           P( con[i+1],  dat, ' ');  //    daß hier bei Bedarf ein
           P( con[i+2], land, ' ');  //    Leerzeichen eingefügt wird ?
         };

//  if(dat[0]) this.getField('601').value = dat[0];
//  usw....

////////////////////////////////////   Zum Vergleich   ////////////////////////////////////////////

onload = function(){document.getElementById('o').innerHTML = Container + n +
                                                             Prio      + n +
                                                               Datum     + n +
                                                             Land;

                    document.getElementById('a').innerHTML = con   + n +
                                                             prio  + n +
                                                             dat   + n +
                                                             land;
                   };
</script>
</head>
<body>
<div id='o' style='color:red;'></div>
<div id='a' style='color:blue;'></div>
</body>
</html>

gruß

matho

63

(11 Antworten, geschrieben in JavaScript - Hilfe)

N'abend Tink,

alles bestens, Du also würdest kein js verwenden.
Das habe ich nun so langsam verstanden.

Möchtest Du allen Ernstes behaupten, das:

http://www.mozilla.org/js/

wäre nicht ernsthaft anwendbar?

gruß

matho

64

(11 Antworten, geschrieben in JavaScript - Hilfe)

@ green

naja, wenn's nur der ie ist, geht's im Prinzip so:

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>
<html>
<head>
<title>felher</title>
<meta http-equiv='content-type' content='text/html; charset=iso-8859-1'>
<script type='text/javascript'>
var d = document,

C = function(){
                try {eval(d.fo.inp.value)
                    }

                catch(it) {var err = '';
                           for(var i in it) err += i + ' => ' + it[i] + 'n';
                           alert(err);
                          };
               };
</script>
</head>
<body>
<form name='fo'>
<input name='inp' />
<input type='button' onclick='C()' />
</form>
</body>
</html>

Aber auch im IE gibt's Gelegenheiten, bei denen dieses Abfangen nicht greift,
und stattdessen die normale Fehlermeldung ausgegeben wird.

gruß

matho

65

(14 Antworten, geschrieben in JavaScript - Allgemeines)

@ Mamphil

"....Solange etwas von meinem Browser angezeigt / interpretiert werden soll,
     muss es in für ihn verständlicher Form vorliegen...."

Selbstverständlich muß es das. Die Frage ist lediglich, zu welchem Zeitpunkt
und wie lange.
Du kannst es mir ruhig glauben: Man kann javascript-code ausführen lassen,
ohne ihn auf Deiner Maschine zu speichern.
Das Verfahren ist nicht ganz einfach, aber es geht.
Ich möchte es allerdings nicht hier in öffentlicher Form diskutieren, und
wie ich Dich kenne, hast Du dafür bestimmt Verständnis.
Ich wollte Dir aber trotzdem sagen, daß Du Dich irrst.

gruß

matho

66

(14 Antworten, geschrieben in JavaScript - Allgemeines)

Moin,

Doch, man kann (wenn man's kann...)

gruß

matho

67

(11 Antworten, geschrieben in JavaScript - Hilfe)

Ooch,

man kann wahnwitzig vernünftige javascripts schreiben, ich mache
das seit geraumer Zeit.
Und eigentlich ist die zugrundeliegende Idee - wenn ich's recht
begreife - soooo unvernünftig nicht.
Wenn ich green richtig verstanden habe, möchte er von einem ihm
nicht bekannten browser dann eine Meldung bekommen, wenn dort
ein Fehler auftritt, der in den browsern, mit denen er getestet hat,
nicht auftritt.
Soweit, sogut.
Nun ist es aber leider wieder mal so, daß das error-handling
in den verschiedenen browsern verschieden ausfällt.
Das bedeutet, man muß sowieso in jedem browser dieses Verhalten
testen. Und dann kann man im Prinzip auch gleich auf etwaige
Fehler testen, und braucht nicht auf die Rückmeldung zu warten.

@ green
Aber vielleicht geht's Dir ja um etwas anderes, bzw. spezielleres.
In dem Fall wär's gut, wenn Du eine genauere Beschreibung des
Problems gibst.

gruß

matho

68

(2 Antworten, geschrieben in JavaScript - Hilfe)

Moin lazion,

"...ersetze Kommas durch Punkte..."

Das ist in jedem Fall eine string-Operation.
Schreib mal:

this.form.ergebnis.value = Number(zahl1) + Number(zahl2)

Allerdings erzeugt Dein Beispiel-code in jedem mir bekannten
browser ganz korrekt 4.

Also wäre entweder die Frage: Welcher browser?
oder:
Ist Dein Beispiel tatsächlich vollständig?

gruß

matho

69

(3 Antworten, geschrieben in CSS)

Moin, intercorni

Vielleicht ist das für Dich von Intresse:

http://www.w3.org/Style/CSS/#browsers


Meine Meinung (zur Sinnhaftigkeit) ist inzwischen die:

Die meisten Endbenutzer sind mit dem IE unterwegs. In der
Regel möchten die ungestört und ohne Fehlermeldungen surfen,
also sollte man drauf achten, daß es in diesem browser
unproblematisch zugeht. Diese Nutzer sind normalerweise auch
nicht an irgendwelchen technischen Details oder gar Schwierigkeiten
und deren Diskussion intressiert.
Alle anderen Benutzer, die andre Betriebssysteme als windows
und/oder andre browser verwenden, sind zumeist aufgeklärter
und wissen besser über ihre Konfiguration Bescheid.
Während es keinerlei Sinn macht, auf einer Website zu sagen:

"Diese site ist für den IE mit der Auflösung xyz optimiert"

ist es durchaus sinnvoll, Benutzern andrer browser die Problematik
insofern transparent zu machen, als daß man sagt:

"Diese site orientiert sich an mozilla und ie. ( + etwaige Erklärungen)"

Wer halt lieber mit opera oder nn4 oder sonstwas unterwegs sein möchte,
muß wissen, was er tut.
Mozilla ist fast überall verfügbar, und für einen aufgeklärteren
Anwender ist es kein Problem, sich das Ding runterzuladen.

Ein großes (stetig wachsendes) Problem ist es allerdings, web-sites
für alle browser zu schreiben, es sei denn, man beschränkt sich
auf reines HTML, oder man hat ein Team von ca. 10 Leuten (aufwärts).

Wenn man die Sache so betrachtet, dann ist es im Wesentlichen
eine Geschmacksfrage, ob man nun mit tables oder mit css formatiert.

Für mich ist die Formatierung mit tables eine ästhetische Zumutung,
auch wenn ich zugeben muß, daß das für den großen Durchschnitt das
Stabilste ist, leider.

Lustigerweise findet sich dann ausgerechnet in der css2.1-specification
ein ausgedehntes Kapitel über tables:

http://www.w3.org/TR/CSS21/tables.html


gruß

matho

70

(8 Antworten, geschrieben in JavaScript - Hilfe)

Moinmoin,

man kann kurzerhand auch sagen:

window.document.form.zufallb.value = String(Math.random()).match(/d{7}/);

gruß

matho

Schreib mal:

<hr noshade="noshade" size="1" />

gruß

matho

Moin pit,

Du solltest als erstes Deine Seite validieren:

http://validator.w3.org/

Ich habe es grad mal gemacht, und erhalte 28 Fehler.

Hier ist die fehlerlose Fassung:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="keywords" content="schmidt, pit, feuervogel, bau, plaene, drachenflieger,
                               gallerie, galerie, plan,drachen, kites, pläne, peter,
                               workshop, grauel, drachen" />
<title>Schmidts-Pit's neue Seite</title>
<link rel="stylesheet" type="text/css" href="css/styles-all.css" />
</head>
<body>
<div id="titel">
<p class="titel">Schmidts-Pit's neue Drachenseite</p>
</div>
<div id="footer">
<p class="footer">home: <a href="http://www.schmidts-pit.de" target="_blank">www.schmidts-pit.de</a> - mail:
                        <a href="mailto:kontakt@schmidts-pit.de">kontakt@schmidts-pit.de</a>
</p>
</div>
<div id="haupt">
<div id="haupt_center">
<div align="center" >
<map name="FPMap0" id="required_1">
<area href="sites/home.html" shape="poly" coords="158,84,176,119,218,114,314,117,255,128,
                                                  215,145,196,166,193,190,206,224,205,237,
                                                  255,377,259,404,244,398,253,476,238,445,
                                                  234,381,229,358,196,237,184,233,180,194,
                                                  167,176,138,164,99,165,42,182,117,140,156,
                                                  125" alt="required_2" />
</map>
<img src="cliparts/1.gif" usemap="#FPMap0" border="0" width="396" height="528" alt="required_3" />
<p>Einfach den Feuervogel anklicken !</p>
</div>
</div>
</div>
</body>
</html>

Ich habe leider keinen Mac zum Testen da, und es ist lange nicht gesagt, daÃ?
es nun klappt, bloÃ? weil der Validator nicht mehr meckert. Es gibt ne
Reihe kleinerer Unterschiede zwischen den IEs aufm MAC und den PCs, die man
einfach kennen muÃ?, da helfen nur Erfahrungswerte.

Allerdings würde ich zunächst einmal ein valides Dokument als
Ausgangspunkt nehmen.

gruÃ?

matho

73

(2 Antworten, geschrieben in JavaScript - Hilfe)

Moinmoin,

<script type='text/javascript'>
var A = ['a', 'b', 'c', 'd', 5, 6, 7, 8, 9, new Object(), ['eieiei']];

alert( A.sort( function(){ return Math.random() - Math.random() } ) )
</script>

Fröhliche Ostern + gruß

matho

74

(4 Antworten, geschrieben in JavaScript - Hilfe)

Moin,

@Sven

" Schade... "

Weder Deine Frage noch deren Beantwortung ist trivial.
Um einigerma�en sinnvoll darüber zu reden, mu� man nämlich
sehr konkret werden.
Um blo� so ein rudimentäres Etwas wie das folgende zu entwerfen,
braucht's aweng Hirnschmalz und Zeit (mich hat's den heutigen
Vormittag gekostet).

Die Probleme, mit denen man es zu tun bekommt, sind vielfältig:

1.) Es soll nach Möglichkeit einfach sein.
2.) Es soll in mehreren browsern laufen.
3.) Es muÃ? in pdf-files umsetzbar sein (hier habe ich als MaÃ?stab
    einfach mal den w3c-validator genommen - ob das so hinhaut, muÃ?
    man überprüfen)

Ich habe mich nicht an Deinem code orientiert, sondern meine alte
skizze aus dem plausch-thread zugrunde gelegt. Zum einen, weil ich,
wenn ich in Deinem Beispiel eine Tabelle erzeuge, sofort einen
Fehler bekomme (d.getElementById(...) is not defined), zum andern,
weil in Deinem Beispiel das nachgefragte Problem (Editieren einer
Tabelle) ja gar nicht behandelt wird.

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<title>uhjegerl</title>
<meta http-equiv='content-type' content='text/html; charset=iso-8859-1'>
<style type='text/css'>
div, img, table { position:absolute; }
#buddy{background:#dadada;
       border-style:solid;
       border-width:1px;
       border-color:black;
       width:566px;
       height:800px;
      }
table{
      /*border-collapse:collapse;*/
      /*border:solid 1px black;*/
     }
#st{top:10px;
    left:600px;
    background:black;
    padding:10px;
    text-align:center;
   }
input{width:160px;
     }
textarea{height:160px;
        }
</style>
<script type='text/javascript'>
var S = 2, SP = 't',
    d = document, op = window.opera, ie = d.all && !op, zI = 111, b, e, s, v, x, y, A, M, GC = 1, TZ = 0,
   BL = function(o){if(o.blur) o.blur()},
    C = function(c, o){return (o ? o : D('buddy')).appendChild(d.createElement(c))},
    D = function(i){return d.getElementById(i)},
    E = function() {e = ie ? event : arguments[0];
                    x = e.clientX;
                    y = e.clientY;
                    b = e[ie ? 'button' : 'which'] == 1 ? 1 : 0;
                    s = e[ie ? 'srcElement' : 'target'];
                   },
    F = function() {return false},
   IH = function(o){return ("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>" +
                           '<html><head><title>'   +
                           (o ? o : 'ot')          +
                           '</title>' +
                           "<meta http-equiv='content-type' content='text/html; charset=iso-8859-1'>" +
                           '</head><body>' +
                           D('buddy').innerHTML    +
                           '</body></html>').replace(/(/[^>]+>)/g, "$1n").replace(/(?:s[ltwhm]|d[xy])=[^>s]+/g, '');
                   },
    P = function(p){return parseInt(p)},
    R = function(r){return r.parentNode.removeChild(r)},
    T = function(t,p){return (p ? p : d).getElementsByTagName(t)},

    O = function(o,r){o.m = 0;
                      o.l = P(o.style.left   = o.offsetLeft   + 'px');
                      o.t = P(o.style.top    = o.offsetTop    + 'px');
                      o.w = P(o.style.width  = o.offsetWidth  + 'px');
                      o.h = P(o.style.height = o.offsetHeight + 'px');
                      o.onmousedown = function(){E(arguments[0]);
                                                 var t = M = this;
                                                 if(s.tagName && !s.tagName.match(/INP|TEXT|BUT/))
                                                 if(b)
                                                  {t.m = 1;
                                                   t.dx = x - t.l;
                                                   t.dy = y - t.t;
                                                   t.style.zIndex = zI++;
                                                   v = e.ctrlKey ? 1 : 0;
                                                   t.style.cursor = v ? 'crosshair' : 'move';
                                                  }
                                                  else
                                                   {if(GC) ED(A = t, t.tagName, s)
                                                   }
                                                 if(s.tagName && !s.tagName.match(/INP|TEXT|BUT/)) return false;
                                                };

                      o.onmousemove = function(){if(s.tagName &&!s.tagName.match(/INP|TEXT|BUT/)) return false};

                      if(r)
                       {o.ondblclick  = function(){ if(GC) R(this) };
                        o.oncontextmenu = F;
                        o.onselectstart = F;
                       };
                     },

   ED = function() {var a = arguments,
                       ed = C('div', D('BIG_B'));

                       with(ed.style)
                        {background = 'green';
                         left       = '600px';
                         top        = '170px';
                         width      = '200px';
                         height     = '330px';
                         padding    = '20px';
                         textAlign  = 'center';
                        };

                    if(a[1] == 'IMG')
                    {var src = C('input', ed),
                           h = C('input', ed);
                     src.value = A ? A.src  : '[ image.src ]';
                       h.value = A ? A.h    : '[ image.height ]';
                    };

                    if(a[1] == 'DIV')
                    {var ih = C('textarea', ed),
                         fc = C('input', ed),
                         bc = C('input', ed);
                     ih.value = A ? A.innerHTML.replace(/<br>/ig, 'n').replace(/ /g, ' ') : '[ text ]';
                     fc.value = A && A.style.color ? A.style.color : ' [ color ] ';
                     bc.value = A && A.style.backgroundColor ? A.style.backgroundColor : ' [ backgroundColor ] ';
                    };

                    if(a[1] == 'TABLE')
                    {var ts = C('input', ed),
                         tz = C('input', ed);
                     ts.value = A ? A.rows[0].childNodes.length : '[ x spalten ]';
                     tz.value = A ? A.rows.length : '[ y zeilen ]';

                     if(a[2] && a[2].tagName.match(/T[DH]/))
                      {C('br', ed);               //für opera
                       var sz = a[2],
                           sd = sz.id,
                           sl = sd.split(SP),
                           ih = C('textarea', ed),
                           fc = C('input', ed),
                           bc = C('input', ed),
                           tw = C('input', ed);
                       C('br', ed);               //für moz
                       var dc = C('button', ed),
                           dr = C('button', ed);
                       ih.value = sz.innerHTML != sd ? sz.innerHTML.replace(/<br>/ig, 'n').replace(/ /g, ' ') :
                                                       '[ ' + sd + ' text ]';
                       fc.value = a[2].style.color ? a[2].style.color : ' [ color ] ';
                       bc.value = a[2].style.backgroundColor ? a[2].style.backgroundColor : ' [ backgroundColor ] ';
                       dc.innerHTML = 'del col ' + sl[1];
                       dr.innerHTML = 'del row ' + sl[2];
                       dc.onclick = function(){for(var i = 0, td; i < (td = T('td', a[0])).length; i++)
                                                if(td[i].id.split(SP)[1] == sl[1]) R(td[i]);
                                               for(var i = 0, th; i < (th = T('th', a[0])).length; i++)
                                                if(th[i].id.split(SP)[1] == sl[1]) R(th[i]);

                                               dc.innerHTML = 'done - press ok';  // nicht NS 7.01
                                               dc.onclick = null;
                                              };
                       dr.onclick = function(){R(D(SP + sl[2] + SP + sl[3]));
                                               dr.innerHTML = 'done - press ok';  // nicht NS 7.01
                                               dr.onclick = null;
                                              };
                       tw.value = a[2].style.width ? a[2].style.width : '[ width % ]';
                      };
                    };

                    ok = C('button', ed);
                    ok.innerHTML = ' ok ';
                    ok.style.width = (ie ? 168 : 164) + 'px';

                    nak = C('button', ed);
                    nak.innerHTML = ' nak ';
                    nak.style.width = (ie ? 168 : 164) + 'px';
                    nak.onclick = function(){R(ed);
                                             GC = 1;
                                            };

                    ok.onclick = function()
                                  {if(a[1] == 'IMG')
                                    {var im = a[0] ? a[0] : C('img');
                                         im.src = src.value;
                                         im.style.height = h.value.replace(/D/g, '').replace(/^$/g, 100) + 'px';
                                     if(!a[0]) O(im, 1);
                                    };

                                   if(a[1] == 'DIV')
                                    {var dv = a[0] ? a[0] : C('div');
                                         dv.innerHTML = ih.value.replace(/r?n/g, '<br>').replace(/ /g, ' ');
                                     try{dv.style.color           = fc.value;
                                         dv.style.backgroundColor = bc.value;
                                        }
                                     catch(it){var err = '';
                                               for ( var i in it) err += i + ' => ' + it[i] + 'n';
                                               //alert(err);
                                              };
                                     if(!a[0]) O(dv, 1);
                                    };

                                   if(a[1] == 'TABLE')
                                    {var tb = a[0] ? a[0] : C('table');

                                     if(a[0])
                                      {sz.innerHTML = ih.value.replace(/r?n/g, '<br>').replace(/ /g, ' ');

                                       for(var i = 0, td; i < (td = T('td', a[0])).length; i++)
                                        if(td[i].id.split(SP)[1] == sl[1])
                                        try{td[i].style.width = (P(tw.value) + '%').replace(/%+/g, '%')}
                                        catch(it){}
                                       for(var i = 0, th; i < (th = T('th', a[0])).length; i++)
                                        if(th[i].id.split(SP)[1] == sl[1])
                                        try{th[i].style.width = (P(tw.value) + '%').replace(/%+/g, '%')}
                                        catch(it){}

                                       try{sz.style.color = fc.value;
                                           sz.style.backgroundColor = bc.value;
                                          }
                                       catch(it){var err = '';
                                                 for ( var i in it) err += i + ' => ' + it[i] + 'n';
                                                 //alert(err);
                                                };
                                      }

                                     else
                                      {var ty = C('tbody', tb), tr, td,
                                           sp = P(ts.value),
                                           zl = P(tz.value);
                                  O(tb, 1);

                                 for(var i = 0; i < zl; i++)
                                    {tr = C('tr', ty);
                                         tr.id = SP + i + SP + TZ;
                                     for(var j = 0; j < sp; j++)
                                    {td = i ? C('td', tr) : C('th', tr);
                                      td.innerHTML = SP + j + SP + i + SP + TZ;
                                      td.id =  SP + j + SP + i + SP + TZ;
                                     td.style.background = i ? 'orange' : 'lightblue';
                                    };
                                    };
                                       TZ++;
                                      };
                                    };
                                   R(ed);
                                   GC = 1;
                                  };
                    O(ed);
                   GC = 0;
                    A = null;
                   },

   DV = function() {if (GC) ED(0, 'DIV') },
   IM = function() {if (GC) ED(0, 'IMG') },
   TB = function() {if (GC) ED(0, 'TABLE') };

d.onmousemove = function(){E(arguments[0]);
                           var h, w;
                           if(M && (s && s.tagName && !s.tagName.match(/INP|TEXT|BUT/)))
                            {if(M.m)
                              {if(v)
                                {M.style.cursor = 'crosshair';
                                 if( (w = x - M.l - Bl) > S) M.w = P(M.style.width  = w + 'px');
                                 if( (h = y - M.t - Bt) > S) M.h = P(M.style.height = h + 'px');
                                }
                               else
                                {if(M.tagName != 'TD')
                                 {M.style.cursor = 'move';
                                  M.l = P(M.style.left = x - M.dx + 'px');
                                  M.t = P(M.style.top  = y - M.dy + 'px');
                                 };
                                };
                              };
                            };
                          };

d.onmouseup   = function(){if(M)
                            {M.m = 0;
                             M.style.cursor = 'default';
                            };
                          };

onload = function(){D('buddy').oncontextmenu = F;
                    D('buddy').onselectstart = F;
                    Bl = P(D('buddy').style.left = '10px');
                    Bt = P(D('buddy').style.top  = '10px');

                    D('BIG_B').style.background  = '#999999';
                    O(D('st'));
                   };
</script>
</head>
<body id='BIG_B'>
<div id='buddy'></div>
<div id='st'>
<form name='fo' action=''>
<input type='button' value='table' onclick="TB();BL(this)" /><br />
<input type='button' value='div'   onclick="DV();BL(this)" /><br />
<input type='button' value='image' onclick="IM();BL(this)" /><br />
<input type='button' value='innerHTML' onclick='alert(IH());BL(this)' />
</form>
</div>
</body>
</html>

Ich hab's nicht kommentiert, weil sich das in diesem Stadium mE. nicht lohnt.
Falls es Dich intressiert, wirst Du es sowieso Zeile für Zeile durchgehn müssen.

Als tatsächlich nicht einfach empfinde ich die Verteilung der diversen Aktionen
auf die zur Verfügung stehenden mousevents. Ich habe zB. nun unterschieden
zwischen left-und right-click. Damit das unter opera 7.23 auch klappt, muÃ? man
dort unter preferences -> multimedia -> javascript-options

Allow script to receive right-clicks

aktivieren.

Wenn Du im schwarzen Feld auf 'table' clickst, öffnet sich ein grünes Feld,
in dem Du zunächst die Anzahl der gewünschten Zeilen und Spalten einträgst.
Gibst Du nun Dein 'ok', wird eine neue Tabelle erzeugt, das grüne Feld verschwindet.
Klickst Du jetzt rechts auf irgendeine Tabellenzelle, erscheint das grüne Feld wieder, und
Du kannst editieren.

Eine Funktion für's Hinzufügen von zusätzlichen Zeilen oder Spalten habe ich mir
erspart, um's nicht noch weiter aufzublähn.
Man kann ja zuerst mehr vom jeweiligen erzeugen, als man wirklich braucht.
Entfernen lassen sich die Dinger.

Wahrscheinlich enthält das script Fehler, die ich nicht gesehen habe.
Ich wollte bloÃ? mal antworten, damit Du Dir nicht vorkommst wie bestellt und
nicht abgeholt.

gruÃ?

matho

ps.:
Leider zerreiÃ?t die hiesige Darstellung mein layout.  Daran kann ich nichts
ändern

Moin Carla,

"... Ich suche ein Script, das möglichst einfach ist, ..."

Da geht's Dir ähnlich wie mir - ich suche eine Problembeschreibung,
die nach Möglichkeit genau ist. Ein Stückchen Beispielcode (wenn's geht,
in konzentrierter Form), der zeigt, wie das bei Dir aussieht, wäre
vielleicht hilfreich.
Wie werden die die Inhalte in den iframe geladen? Ausschließlich durch
click auf die links?
Soll lediglich angezeigt werden, welcher link grade aktiv ist, und Du
brauchst nur zwo images? Oder hat jeder link ein eigenes image, oder
sogar jeweils je ein eigenes für aktiv und passiv?
Wie sind die images eingebunden? Als separater tag oder als background
des links?

gruß

matho