Fabian Bernecker: .focus() in Opera

var obj = document.getElementByID("eingabe");
obj.focus();
obj.value = obj.value;

Das funktioniert zumindest im IE, im Mozilla und im Netscape. Allderdings ist der Zeichencursor in Opera immer am Anfang des Textfeldes.  Beispiel:

Ich gebe ein: "1" und "2" und "3"
Im Opera steht dann im Textfeld: "1" und "21" und "321"

Bei einem onKeyUp wird ein Script ausgeführt das ein paar Sachen in der Seite ändert und am Ende wieder in das Textfeld zurückspringen soll.

Weiß da vlt jemand eine Lösung für?

if(navigator.userAgent.search("Opera") != -1){
  obj.value = obj.value.substr(1, obj.value.length - 1) + obj.value.substr(0,1);
}

So weit so gut, die Eingabe funktioniert. Allerdings gibt es dann ein paar Probleme beim Versuch den Inhalt mit Backspace oder Delete zu löschen :/

  1. Hallo, Fabian,

    var obj = document.getElementByID("eingabe");
    obj.focus();

    Es ist für den Benutzer meist höchst verwirrend, wenn du ihm seinen Focus entreißt.

    obj.value = obj.value;

    Würdest du mir den Sinn dieser Zeile erklären?

    Das funktioniert zumindest im IE, im Mozilla und im Netscape. Allderdings ist der Zeichencursor in Opera immer am Anfang des Textfeldes.  Beispiel:

    Ich gebe ein: "1" und "2" und "3"
    Im Opera steht dann im Textfeld: "1" und "21" und "321"

    Überlege, warum.

    Bei einem onKeyUp wird ein Script ausgeführt das ein paar Sachen in der Seite ändert und am Ende wieder in das Textfeld zurückspringen soll.

    Das wirst du mit Opera nicht ohne Probleme realisieren können, da Opera sich meines Wissens (im Gegensatz zu den anderen genannten Useragenten) korrekt bei .focus() verhält.

    Weiß da vlt jemand eine Lösung für?

    if(navigator.userAgent.search("Opera") != -1){
      obj.value = obj.value.substr(1, obj.value.length - 1) + obj.value.substr(0,1);
    }

    Diese Browserweiche ist sinnfrei. Opera wird sich _extrem selten_ als Opera ausgeben.

    Grüße aus Barsinghausen,
    Fabian

    1. Hi Fabian,

      if(navigator.userAgent.search("Opera") != -1){

      Diese Browserweiche ist sinnfrei.

      Richtig. Ausschließlich if(window.opera) ist zuverlässig.

      Opera wird sich _extrem selten_ als Opera ausgeben.

      Warum?

      Grüße,
       Roland

      1. Hallo Roland,

        if(navigator.userAgent.search("Opera") != -1){

        Diese Browserweiche ist sinnfrei.

        Richtig. Ausschließlich if(window.opera) ist zuverlässig.

        Opera wird sich _extrem selten_ als Opera ausgeben.

        Warum?

        Weil (nach meiner Erfahrung) sich viele Operas _im HTTP_USER_AGENT_ als MSIE ausgeben, zudem auch noch als Plattform "Windows NT 5.1" angeben. Du weißt ja, wie... ;-)

        Grüße aus Barsinghausen,
        Fabian

        1. obj.value = obj.value;

          In Allen Browsern wird der Textcursor an den Anfang des Textfeldes gesetzt. Durch diesen kleinen Aufruf wird er in allen außer Opera ans Ende gesetzt. Und ich suche dafür eien Alternativlösung.
          Und die Abfrage ob es sich um Opera handelt funktionierte bei 4 Rechnern an denen ich es getestet hatte ;)
          Nur immo bin ich halt immer noch auf der Suche nach einer Lösung bfür das Problem, denn mir fällt immo nix neues ein :/

          Grüße

          Fabian

    2. Hi,

      Diese Browserweiche ist sinnfrei. Opera wird sich _extrem selten_ als Opera ausgeben.

      Dennoch hat Opera IMMER den String "Opera" in seinem UA, auch wenn da noch MSIE oder Netscape auftaucht. Das kann ich zumindest für Opera 5-7 unter Windows sagen.
      Sogesehen ist es nicht unsicher, wenn man nach dem String Opera sucht, außer andere Browser können sich als Opera ausgeben.
      da ist window.opera natürlich besser.

      Gruß
      Scooter

      1. Hallo Scooter,

        Diese Browserweiche ist sinnfrei. Opera wird sich _extrem selten_ als Opera ausgeben.

        Dennoch hat Opera IMMER den String "Opera" in seinem UA, auch wenn da noch MSIE oder Netscape auftaucht. Das kann ich zumindest für Opera 5-7 unter Windows sagen.

        Für _deine_ Opera 5-7 vielleicht.

        Ich habe schon Operas gesehen, die "Ferrari F1 2003 GT" oder auch "Statisktikverfälscher" als UA-String gesendet haben - _ohne_ irgendein OPERA.

        Meine Opera gibt sich im Moment übrigens als "MSIE 6.0 (X11; U; Linux i686; de; rv:6.0) Debian" aus ;-))

        Grüße aus Barsinghausen,
        Fabian

        1. Hallo,

          Diese Browserweiche ist sinnfrei. Opera wird sich _extrem selten_ als Opera ausgeben.

          Dennoch hat Opera IMMER den String "Opera" in seinem UA, auch wenn da noch MSIE oder Netscape auftaucht. Das kann ich zumindest für Opera 5-7 unter Windows sagen.

          Für _deine_ Opera 5-7 vielleicht.

          Ich habe schon Operas gesehen, die "Ferrari F1 2003 GT" oder auch "Statisktikverfälscher" als UA-String gesendet haben - _ohne_ irgendein OPERA.

          Wir reden aber über dasselbe...? Es ging um die JavaScript-Eigenschaft navigator.userAgent, nicht um den HTTP-Header User-Agent. Ohne Proxy lässt sich dieser Header meines Wissens nicht in die Richtung ändern, dass der String »Opera« nicht mehr vorkommt. Und navigator.userAgent lässt sich meines Wissens schon gar nicht ändern, wenn man von einem Proxy absieht,
          der nicht nur den HTTP-Verkehr filtert und manipuliert, sondern auch das Markup.

          Meine Opera gibt sich im Moment übrigens als "MSIE 6.0 (X11; U; Linux i686; de; rv:6.0) Debian" aus ;-))

          Wie machst du das, hast du die Binaries verändert? Du redest aber auch von der besagten JavaScript-Eigenschaft, nicht vom HTTP-Header, der beim Server ankommt und zwischendurch von einem Proxy umgeschrieben wird?

          http://www.opera.com/support/search/supsearch.dml?index=570...

          Mathias

  2. Hi,

    hast du es mal mit obj.select() probiert? Ich kenne das Problem, und ich meine unterm IE hab ich es mal mit select() lösen können.

    Es musst vor oder nach der Wertzuweisung hin.

    Gruß
    Scooter