Lorsque vous ouvrez cette page (voir Démo en direct ) avec Chrome:
<span id="myspan" contenteditable=true></span>
CSS:
#myspan { border: 0; outline: 0;}
JS:
$(myspan).focus();
la contenteditable
span
a le focus (vous pouvez commencer à écrire des choses et vous verrez qu'elle en avait déjà le focus), mais nous ne voyons pas le curseur d'édition "I
".
Comment faire pour que ce curseur soit affiché? (Remarque: outline:0
est nécessaire, ainsi que le fait que la plage est vide même sans espace blanc).
Remarque: avec Firefox, le curseur est affiché.
La solution consistait à changer <span>
en <div>
(j'ai vu que cela résout de nombreux problèmes contenteditable
dans d'autres questions ici et là) et d'ajouter un min-width
.
En effet, avec le code suivant, la taille du <div>
serait 0px x 18px
! Cela explique pourquoi le caret _ (curseur d'édition) serait masqué!
HTML
<div id="blah" contenteditable=true></div>
CSS
#blah {
outline: 0;
position: absolute;
top:10px;
left:10px;
}
JS
$("#blah").focus();
Puis, en ajoutant
min-width: 2px;
dans le CSS autorisera l'affichage du curseur, même avec Chrome: http://jsfiddle.net/38e9mkf4/2/
Le problème est que span
s sont des éléments en ligne. Ajoutez simplement display:block;
à votre CSS et cela résoudra le problème.
$(myspan).focus();
#myspan {
border: 0;
outline: 0;
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<span id="myspan" contenteditable=true></span>
J'ai ajouté un rembourrage à gauche et le curseur apparaît.
#myspan
{
border: 0;
outline: 0;
min-width: 100px;
height: 30px;
padding-left: 1px;
}
.cont_edit {
outline: 1px solid transparent;
}
Cela tient simplement à la manière dont une zone vide ContentEditable
est rendue. Pour prouver que cela ne concerne pas le focus, ajoutez du texte à votre div éditable, puis supprimez-le. Lorsque le dernier caractère est parti, le curseur disparaîtra
À partir de la question Définition du caret sur un nœud vide dans un élément contentEditable
Le modèle de sélection/plage est basé sur des index dans le contenu texte, sans tenir compte des limites des éléments. Je pense qu'il est peut-être impossible de définir le focus d'entrée dans un élément en ligne sans texte. Certainement, avec votre exemple, je ne peux pas définir le focus dans le dernier élément en cliquant sur les touches fléchées.
Cela fonctionne presque si vous définissez chaque étendue sur
display: block
, bien que le comportement reste très étrange, en fonction de l'existence d'espaces dans le parent. Si vous modifiez l'affichage pour qu'il apparaisse en ligne avec des astuces telles que float, inline-block et position absolue, IE traite chaque élément comme une zone d'édition distincte. Les éléments de bloc positionnés les uns à côté des autres fonctionnent, mais c'est probablement peu pratique.
Vous pouvez également essayer d’ajouter un caractère de largeur nulle comme ​
document.getElementById('myspan').focus();
#myspan {
border: 0;
outline: 0;
}
<span id="myspan" contenteditable="true">​</span>
Pour moi, régler le contenu de div contenteditable sur <br>
fonctionne. J'ai essayé de le régler sur nbsp;
, mais cela crée un espace de caractères supplémentaire dans la div avant de commencer l'édition. Donc, je choisis ceci:
<div id="blah" contenteditable=true><br></div>
plus de:
<div id="blah" contenteditable=true>nbsp;</div>
J'espère que cela t'aides.
Ajouter un style CSS de
min-height: 15px;
vous pourriez aussi avoir besoin
display: block;
à votre tag contenteditable="true"