tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
172
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von nordi
    nordi nordi ist offline Mitglied Brillant
    Registriert seit
    Jun 2002
    Ort
    köln
    Beiträge
    783
    Hallo, ich weiß - es ist ein komisches Topic, was ich da eingegeben habe, aber ich weiß nicht, wie ich es anders beschreiben soll Ich habe eine Maske, in der ich Text eingebe und die dann in eine Datenbank abgespeichert wird. Den Text kann man via BB-Code formatieren. Dafür habe ich folgenden Code verwendet:

    HTML-Code:
    <a href="#" onClick="insert('[b]', '[/b]')" class="bold">Bold</a>
    	<a href="#" onClick="insert('[i]', '[/i]')" class="italic">Italic</a>
        <a href="#" onClick="insert('[UP]', '[/UP]')" class="uppercase">UPPER</a>
    	<a href="#" onClick="insert('[u]', '[/u]')" class="underline">Underline</a>
    	<a href="#" onClick="insert('[url=]', '[/url]')">Hyperlink</a>
    	<a href="#">Color<span><img src="img/grau.png" onClick="insert('[color=#9e9e9e]', '[/color]')" /><img src="img/gruen.gif" onClick="insert('[color=#cdfa2e]', '[/color]')" /></span></a>
    die Javascript-Datei sieht wie folgt aus:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    
    function insert(aTag, eTag) {
      var input = document.forms['editor'].elements['text'];
      input.focus();
      if(typeof document.selection != 'undefined') {
        var range = document.selection.createRange();
        var insText = range.text;
        range.text = aTag + insText + eTag;
        range = document.selection.createRange();
        if (insText.length == 0) {
          range.move('character', aTag.length + insText.length + eTag.length);
        } else {
          range.moveStart('character', aTag.length + insText.length + eTag.length);      
        }
        range.select();
      }
      else if(typeof input.selectionStart != 'undefined')
      {
        var start = input.selectionStart;
        var end = input.selectionEnd;
        var insText = input.value.substring(start, end);
        input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end);
        var pos;
        if (insText.length == 0) {
          pos = start + aTag.length + insText.length + eTag.length;
        } else {
          pos = start + aTag.length + insText.length + eTag.length;
        }
        input.selectionStart = pos;
        input.selectionEnd = pos;
      }
      else
      {
        var pos;
        var re = new RegExp('^[0-9]{0,3}$');
        while(!re.test(pos)) {
          pos = prompt("Einfügen an Position (0.." + input.value.length + "):", "0");
        }
        if(pos > input.value.length) {
          pos = input.value.length;
        }
        var insText = prompt("Bitte geben Sie den zu formatierenden Text ein:");
        input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos);
      }
    }

    Es klappt auch alles wunderbar. Aber wenn ich auf einen Button klicke wie bsplw. BOLD, dann scrollt die Seite automatisch nach oben?! Die Textarea befindet sich relativ weit unten auf der Seite - man muss also runterscrollen um sie zu sehen. Wenn man dann den Text eingibt und ihn gegebenfalls formatieren will mit den Buttons, springt die Seite automatisch ganz nach oben und ich weiß nicht warum? Wie kann man diesen Bug beheben?

    Vielen Dank für Anregungen.

    Grüße aus Köln
     
    .wer nichts wird, wird wirt.

  2. #2
    Maik Tutorials.de Gastzugang
    Hi,
    Zitat Zitat von nordi Beitrag anzeigen
    Es klappt auch alles wunderbar. Aber wenn ich auf einen Button klicke wie bsplw. BOLD, dann scrollt die Seite automatisch nach oben?! Die Textarea befindet sich relativ weit unten auf der Seite - man muss also runterscrollen um sie zu sehen. Wenn man dann den Text eingibt und ihn gegebenfalls formatieren will mit den Buttons, springt die Seite automatisch ganz nach oben und ich weiß nicht warum? Wie kann man diesen Bug beheben?

    Vielen Dank für Anregungen.
    Code :
    1
    
    <a href="#" onclick="insert('[noparse][b][/noparse]', '[noparse][/b][/noparse]')[b]; return false;[/b]" class="bold">Bold</a>


    "return false" bewirkt, dass der Browser das Verweisziel im href-Attribut nicht aufruft, das einem Anker (ohne Ankername) entspricht, weshalb er an den Seitenanfang springt.

    Denkbar ist hier auch die Vergabe eines Ankernamens, der im Dokument überhaupt nicht existiert:

    Code :
    1
    
    <a href="#[b]nogo[/b]" onclick="insert('[noparse][b][/noparse]', '[noparse][/b][/noparse]')[b]" class="bold">Bold</a>


    Die Event-Handler werden übrigens durchgängig kleingeschrieben.

    mfg Maik
     

  3. #3
    Nord-Süd-Richtung Nord-Süd-Richtung ist offline Mitglied Platin
    Registriert seit
    Feb 2008
    Beiträge
    522
    Zitat Zitat von Maik Beitrag anzeigen
    Die Event-Handler werden übrigens durchgängig kleingeschrieben.
    Wirklich? Ich dachte HTML-Attribute kann man schreiben wie man möchte?
     
    Napoleon trug rote Kleidung, damit seine Soldaten nicht sahen, dass er verwundet war.
    Die Naz!s trugen braune Hosen ...

  4. #4
    Maik Tutorials.de Gastzugang
    Zitat Zitat von Nord-Süd-Richtung Beitrag anzeigen
    Wirklich? Ich dachte HTML-Attribute kann man schreiben wie man möchte?
    Ich halte mich da an die Schreibweise in der offiziellen Spezifikation http://www.edition-w3.de/TR/1999/REC...ttributes.html

    Und in XHTML erzeugt nordis Schreibweise eine Validator-Fehlermeldung:
    there is no attribute "onClick"
    Unterschied: Kleinschreibung.

    mfg Maik
     

  5. #5
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    sauberste Lösung: lasse das href-Attribut weg, wenn du es nicht benötigst.
    Den einzigen Zweck, den es bei dir erfüllt, ist das Erzeugen des pointer-Cursors, und sowas geht auch per CSS.
     

  6. #6
    Maik Tutorials.de Gastzugang
    Zitat Zitat von Sven Mintel Beitrag anzeigen
    Den einzigen Zweck, den es bei dir erfüllt, ist das Erzeugen des pointer-Cursors, und sowas geht auch per CSS.
    Code css:
    1
    
    a { cursor:pointer; }

    mfg Maik
     

  7. #7
    Avatar von nordi
    nordi nordi ist offline Mitglied Brillant
    Registriert seit
    Jun 2002
    Ort
    köln
    Beiträge
    783
    Hi, super! Das Springen der Seite nach oben ist nun behoben. Wenn man nun aber einen längeren Text in die Textarea eingibt und dann einen Button zur Formatierung klickt, springt der Cursor innerhalb der Textarea ganz nach oben?! Das war übrigens auch schon vorher der Fall, hatte ich vergessen zu erwähnen. Worauf kann das liegen?
     
    .wer nichts wird, wird wirt.

Ähnliche Themen

  1. Flash Buttons auf HTML Seite verlinken
    Von Lethal im Forum Flash Plattform
    Antworten: 6
    Letzter Beitrag: 16.06.10, 09:51
  2. Mehrere Buttons auf einer Seite
    Von counteract im Forum PHP
    Antworten: 9
    Letzter Beitrag: 10.03.07, 13:19
  3. Login; 1 Seite 2 Buttons
    Von Eisbaer im Forum PHP
    Antworten: 8
    Letzter Beitrag: 21.06.05, 18:56
  4. Antworten: 4
    Letzter Beitrag: 10.10.02, 11:28
  5. Antworten: 8
    Letzter Beitrag: 27.12.01, 10:34