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?
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);
}
}
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).