Insérer du texte sur la place actuelle du curseur dans le navigateur

j'ai une fenêtre modale qui aide à formater le texte. J'ai plusieurs textareas sur la fenêtre. Le modal ne doit pas être attaché à un textarea spécifique, donc quand j'appuie sur une icône dans la fenêtre modal, j'ai besoin d'insérer une chaîne de caractères/emoticon etc où-quelque soit le curseur est actuellement. Ma question, Comment savoir dans quel élément (textarea/input/whatever) se trouve le curseur?

3
demandé sur Itay Moav -Malimovka 2009-10-25 23:06:23

2 réponses

la dernière version de tous les navigateurs document de soutien.activeElement. Cela vous indiquera quel champ a actuellement focus dans cette fenêtre (c'est là que se trouve le curseur). Ensuite, vous aurez besoin de savoir comment insérer du texte à la position actuelle du curseur. La fonction suivante.

// Author: http://alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript
// Modified so it's safe across browser windows
function insertAtCursor(myField, myValue) {
  var doc = myField.ownerDocument;
  //IE support
  if (doc.selection) {
    myField.focus();
    sel = doc.selection.createRange();
    sel.text = myValue;
  }
  //FF, hopefully others
  else if (myField.selectionStart || myField.selectionStart == '0') {
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;
    myField.value = myField.value.substring(0, startPos) + 
                    myValue + myField.value.substring(endPos, myField.value.length);
  } 
  // fallback to appending it to the field
  else {
    myField.value += myValue;
  }
}

par conséquent, à partir de votre popup, votre gestionnaire de boutons devrait appeler la méthode suivante

// Pardon my contrived function name
function insertTextIntoFocusedTextFieldInOpener(text) {
  var field = window.opener.document.activeElement;
  if (field.tagName == "TEXTAREA" || (field.tagName == "INPUT" && field.type == "text" ) {
    insertAtCursor(field, text);
  }
}
4
répondu Juan Mendes 2009-12-10 21:46:57

il ne semble pas y avoir de propriété comme isfocused que vous pouvez simplement vérifier afin de déterminer si un champ de texte particulier a la mise au point. Cependant, vous pouvez créer un gestionnaire d'événements pour l'événement onFocus pour chacune des boîtes de texte, et lui faire enregistrer L'ID de la nouvelle boîte de texte focalisée dans une variable afin que vous puissiez La vérifier plus tard.

Aussi, vous pouvez être intéressé par ce tutoriel , qui vous indique comment insérer du texte à la position actuelle du curseur dans un champ donné (une fois que vous avez déterminé quel champ est focalisé, par exemple en utilisant la méthode ci-dessus).

0
répondu David 2009-10-25 20:13:43