3 Stimmen

Javascript: Erkenne, ob das Textfeld den Fokus hat.

Ich aktualisiere ein Skript, um es browserübergreifend zu machen. Der aktuelle Code, den ich habe, lautet wie folgt.

function testFocus(){   
    var testSelection = document.getElementById('chattext').contentWindow.
                  window.document.selection.createRange().parentElement();

    while (testSelection)
    {
        if (testSelection.id == "chatContent") {
            return true;
        }
        testSelection = testSelection.parentElement;
    }
    return false; 
}

Allerdings funktioniert der folgende Code in modernen Browsern nicht mehr. Der obige Code muss derzeit Text ausgewählt haben. Wo er nur überprüfen muss, ob das Textfeld den Fokus hat. Die Funktion wird als Überprüfung verwendet, bevor Text über einen Button / Javascript hinzugefügt wird.

0voto

Alex C Punkte 15856

Mir ist aufgefallen, dass Sie einen Ereignislistener verwenden könnten, um eine Variable festzulegen. Das einzige Problem dabei ist, dass der IE attachEvent(event, callback) anstelle von addEventListener verwendet, sodass Sie tatsächlich den folgenden Code hinzufügen müssen:

  var ChatHatFokus = false;
  var ts = document.getElementById('chattext');
  function setFocus()  {ChatHatFokus = true;}
  function setNoFocus(){ChatHatFokus = false;}
  if (ts.addEventListener != undefined) { 
      ts.addEventListener('focus', setFocus, false);
      ts.addEventListener('blur', setNoFocus, false);
  } else if (ts.attachEvent != undefined) {
      ts.attachEvent('onfocus', setFocus);
      ts.attachEvent('onblur', setNoFocus);
  } else {
      ts.onmouseover = setFocus;
      ts.onmouseout = setNoFocus;
  }

Bearbeiten - Ich habe Script-Tags hinzugefügt, um Ihnen zu zeigen, wie es Ihrem Dokument hinzugefügt wird. Ich habe es in Firefox und Chrome getestet und es scheint zu funktionieren, aber es könnte etwas schwieriger sein, eine IE-Sandbox zu erstellen. Ich bin sicher, dass mir dabei etwas Kleines entgeht - ich werde mir das ansehen.

Bearbeiten2 - Ich habe einen Fehler im IE-Code gemacht. Es stellt sich heraus, dass Sie 'undefined' nicht in Anführungszeichen setzen. Ich habe den obigen Code korrigiert, um eine Antwort widerzuspiegeln, die in Firefox, Chrome und IE6 getestet und funktioniert. Ich habe keine anderen IE-Versionen zum Testen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X