Cursor Positionierung

  • Guten Morgen,


    ich bin auf der Suche nach einer Möglichkeit, beim Aufruf eines Formulars, den Cursor automatisch in einem bestimmten Feld zu positionieren.


    Kann mir da jemand helfen?


    Danke


    Peter

  • Von so einer Funktion hab ich noch nie was gehört.
    Wenn es möglich ist, dann nur mit Javascript.


    Eine ähnliche Variante gibt es, dass der User bei drücken von ALT und einer von dir bestimmten Taste auf ein der Taste zugewiesenes Link- oder Buttonfeld springen kann. Falls du so etwas gebrauchen kannst.


    Wofür genau willst du das denn einstellen?
    Vielleicht gibts noch eine bessere Alterntive.



    PS: Pass beim nächsten mal bitte besser auf, in welches Forum du deinen Thread setzt.

  • ich möchte eine schelle Datenerfassung ermöglichen.


    Normalerweise steht der Cursor ja in der Taskleiste des Browsers und man muss erst in das erste Erfassungsfeld klicken - oder zig-mal Tab drücken. Das dauert mir zu lange. Vor allem, wenn man mehrere Datensätze erfassen muss.

  • Hi,
    Also mit folgendem Code/Script kannst du einstellen, dass der Cursor bei Laden der Seite direkt im gewählten Formular bzw. <input>-Feldchen blinkt.


    Für das Formular:

    HTML
    <html>
    <body onLoad="this.document.form1.a.focus();">
    <form name=form1>
    <input type="text" size=40 name="a" value=""><br>
    <input type="text" size=40 name="b" value="http://">
    </form> 
    </body>
    </html>




    Für das input-Feldchen:

    HTML
    <html>
    <body onLoad="this.document.getElementById('zwei').focus();">
    <form>
    <input type="text" size=40 name="a" value=""><br>
    <input id="zwei" type="text" size=40 name="b" value="http://">
    </form>
    </body>
    </html>



    Das erste sollte auf jedenfall funktionieren, da ich es nicht geschrieben hab :) (Quelle)
    Das zweite hab ich so umgeschrieben, dass du direkt ein Feld innerhalb eines Forumlars anspringen kannst.
    Ob das nun die eleganteste und beste Lösung dafür ist und ob es unter allen Umständen funktioniert kann ich allerdings nicht garantieren, da ich mich mit JS nicht so wirklich doll auskenne und da auch nicht über Tücken und Fallen bescheid weiß.



    Edit:
    Die Wahrscheinlichkeit des Nichtfunktionierends sollte aber ziemlich gering sein.
    So komplex ist das Script ja auch wieder nicht :D

  • Super, vielen Dank, Peter



    Edit:
    Moin,
    hat leider nichts gebracht. Das Formular wird in einem div-Element eines Containers geöffnet. Wahrscheinlich wird solch eine Anweisung dann ignoriert.


    Trotzdem Danke
    Peter



    Edit #2:
    kann es sein, dass ein submit-button die focussierung automatisch auf sich zieht?


    wenn ich mit bei Einbindung des scriptes enter drücke, habe ich den button im focus.

  • Kann sein aber kannst du mal hierzu:


    Zitat

    hat leider nichts gebracht. Das Formular wird in einem div-Element eines Containers geöffnet. Wahrscheinlich wird solch eine Anweisung dann ignoriert.


    Den kompletten Code posten?
    Des geht ganz sicher! :)

  • <body onLoad="this.document.login.login[BenutzerName].focus();">
    <form name="login" action="" method="post">
    <br />
    <strong>Benutzername</strong><br />
    <input id="focus" name="login[BenutzerName]" type="text" value="" style="width:130px; " /><br />


    <strong>Passwort</strong><br />
    <input name="login[BenutzerPasswort]" type="password" style="width:130px;" /><br />


    <input name="aktion_login" type="submit" value="Login" style="margin-top:5px;" /><br />
    </body>



    Dieser Code steht in einer php-Datei. Das hieraus generierte Formular wird dann mit folgender Anweisung im entsprechenden Element geöffnet:



    <!-- Der Inhaltsbereich der Website mit den Seiteninhalten der Untermenuepunkte -->
    <div id="hauptteilinhalt">
    <?php
    // Falls "Login"-Klasse eine Fehler- oder Erfolgmeldung produziert hat, diese
    // hier ausgeben in einer umrandeten Box
    if($Login->fehlermeldung){
    echo "<div class=\"fehler_box\">$Login->fehlermeldung</div>";
    }
    if($Login->erfolgsmeldung){
    echo "<div class=\"erfolgs_box\">$Login->erfolgsmeldung</div>";
    }


    // Inkludieren der aktuellen Unterseite, der Pfad wurde in der Klasse "Tabs"
    // generiert
    if(is_file($Tabs->subpfad)){
    require_once($Tabs->subpfad);
    }
    else{
    if(ERRORS)
    echo "<p>Die Datei <strong>$Tabs->subpfad</strong> konnte nicht gefunden " .
    "werden.<br />" . FEHLERMELDEN . '</p>';
    else
    echo UNBEKANNTERFEHLER;
    }
    ?>
    </div>

  • Hi,
    also du hast in deiner HTML-Datei folgende Sachen nicht beachtet:


    o es heißt onLoad="this.document.getElementById('id').focus();" (eine extra Verschachtelung brauchst du nicht)
    o der Name des Element, das angesprungen werden soll, wird aus der ID, nicht aus dem Namen ausgelesen (bei dir focus).


    Der gesamte Code von dir lautet also:


    focus() ist dabei nur die JS-Funktion, die dafür sorgt, dass der Cursor auf dem davor deklarierten Element landet und hat somit nix mit irgendeinem HTML-Element zu tun.

  • Dieser Code funktionert als eigenständige Seite einwandfrei.


    Wenn sie aber, wie in meinem Fall über eine andere Anwendung aufgerufen wird, klappt das nicht. Ich schau mir mal das mal in Ruhe an. Vielleicht finde ich eine Möglichkeit, die Anweisung an anderer Stelle unterzubringen.


    Vielen Dank

  • ich habe jetzt festgestellt, dass mir beim Aufruf dieser Seite eine Fehlermeldung gesandt wird:


    Zeile 730
    Zeichen 1
    Fehler Das Objekt unterstützt diese Eigenschaft oder Methode nicht
    Code 0
    URL ...


    Java-Script ist über die aufrufende Seite eingebunden.
    Wenn ich Java-Script auf dieser Seite ein zusätzlich einbinde, bringt das auch nichts.
    Wie kann ich die Zeile 730 auszählen? Wenn ich die Zeilennumer in der Index-Datei, auf der die Unterseite aufgerufen wird, mit der Zeilennummer der aufgerufenen Seite addiere, felen mir immer noch ca 100 Zeilen.

  • Also zum "Zeilen auszählen" musst du den Quellcode nur in einen Editor laden, der eine Funktion "Zeilen zählen" unterstützt (aber auch nicht selbst die Zeile umbricht, so wie Word) oder einen Editor, der am Anfang einer Zeile direkt immer die Zeilennummer mit angibt.



    Bei welchem Browser erhälst du denn diese Fehlermeldung?
    Und hast du es schonmal mit nem anderen Browser ausprobiert?



    Wenn du mir den gesamten Quellcode geben kannst (am besten die URL, damit man hier nich so ewig scrollen muss), kann ich mir das auch selbst mal genau anschauen.

  • ich arbeite mit eclipse, das zeigt mir die Zeilen schon an, aber der Aufruf erfolgt über mehrere Dateien.


    Die Fehlermeldung erhalte ich vom IE. Ich habe mir jetzt noch den Firefox installiert. Da kommt zwar keine Fehlermeldung, aber funktionieren tut es auch nicht.


    Da ich lokal arbeite, kann ich Dir keine URL geben. Ich beschränke mich im Folgenden auf die relevanten Code-Ausschnitte:


    Index.php:


    ...
    ?>
    <!-- Javascript-Datei mit Basisfunktionen, die ueberall gebraucht werden koennen -->
    <script language="JavaScript" src="js/basis.js" type="text/javascript"></script>
    <!-- Favicon (kleines Bild fuer die Adresszeile bzw. Lesezeichen) -->
    <link rel="shortcut icon" href="favicon.ico" type="image/ico" />
    <?php
    // Die MouseOver-Bilder der Menue-Registerkarten werden mit JavaScript vorgeladen. Der Code
    // hierfuer wird von dieser statischen Methode erzeugt.
    echo Allgemein::ladeHovers($dbh);
    ?>
    </head>



    <body onload="hauptformular.Fokussieren();">
    <!-- Anker fuer Links zum Anfang der Seite -->
    <div id="oben"></div>
    <a name="oben"></a>
    ...


    Basis.js:


    ...
    function hauptformularFokussieren(){
    // Abkuerzung zum Formular
    form = document.hauptformular;
    if(form){
    for(var i = 0; i < form.elements.length; i++){
    if((form.elements[i].type == 'text' || form.elements[i].type == 'textarea')
    && form.elements[i].value == ''){
    form.elements[i].focus();
    break;
    }
    }
    }
    }
    ...


    logonlogoff-klasse.php:


    ...
    public function ausgabelogin(){


    $this->html = '
    <form name="hauptformular" action="" method="post">
    <table width="400" border="0">
    <tr>
    <td>
    <strong>Benutzername</strong><br />
    <input name="login[BenutzerName]" type="text" value="" style="width:130px; " />
    </td>
    </tr>
    <tr>
    <td>
    <strong>Passwort</strong><br />
    <input name="login[BenutzerPasswort]" type="password" style="width:130px;" />
    </td>
    </tr>
    <tr>
    <td>
    <input name="aktion_login" type="submit" value="Login" style="margin-top:5px;" />
    </td>
    </tr>
    </table>
    </form>';

    $this->html .='<br /> Sollten Sie noch keinen Login besitzen, lassen Sie sich bitte registrieren.<br />Ansonsten können Sie nicht alle Funktionen nutzen.';
    }
    ...


    der Inhalt von $html wird über folgende Funktion ausgegeben:


    public function __toString(){


    return $this->html;


    }


    Auf der Seite: <!-- w --><a class="postlink" href="http://www.webflips.de">http://www.webflips.de</a><!-- w --> kann man sehen, dass das Prinzip funktioniert. Test über Interaktiv - Gästebuch - neuer Eintrag


    Ich glaube, dass da neben dem eigentlichen Code noch etwas sein muss.
    Wie kann man beeinflussen, ob ein Objekt eine Methode unterstützt?

  • ich habe den Teil mit dem Formular durch ein Formular ersätzt, das in seiner ursprünglichen Umgebung funktioniert. Bei mir klappt es denn nicht.


    Kann es sich um ein Problem auf meinem Rechner handeln? Wenn ich die Seite <!-- w --><a class="postlink" href="http://www.webflips.de">http://www.webflips.de</a><!-- w --> aufrufe, funktioniert der Focus der dortigen Formulare problemlos.


    Java ist ja lokal bei mir installiert. Ein Versions-Konflikt müsste ja in beiden Fällen auftreten.


    Das Script erkennt, dass ein 'hauptformular' vorliegt. Rufe ich eine Seite auf, die keines hat, steht das entsprechend in der Fehlermeldung des IE.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!