Étapes de base
- Mettre une zone de texte dans un div style et il cache aussi il.
- Faites de la div une sorte de zone de texte.
- Dans le gestionnaire onClick du div, définissez le focus d'entrée sur la zone de texte masquée.
- Gérez l'événement onKeyUp de la zone de texte masquée pour capturer le texte, formater si nécessaire et modifier le innerHtml de la div.
C'est assez simple. Je vais vous laisser écrire votre formateur, mais en gros, vous ne feriez que splitter sur le séparateur selon l'exemple de semi-travail.
Outline Simple
<html>
<head>
<script language="javascript" type="text/javascript">
function focusHiddenInput()
{
var txt = document.getElementById("txtHidden");
txt.focus();
}
function formatInputAndDumpToDiv()
{
alert('Up to you how to format');
}
</script>
</head>
<body>
<div onclick="focusHiddenInput();">
Some label here followed by a divved textbox:
<input id="txtHidden" style="width:0px;" onKeyPress="formatInputAndDumpToDiv()" type="text">
</div>
</body>
</html>
Semi-Exemple de
Vous devez toujours étendre les gestionnaires de clic pour tenir compte de la suppression de tag/édition/retour arrière/etc via le clavier .... ou vous pouvez simplement utiliser un événement click pour afficher un autre menu contextuel div. Mais avec des étiquettes et ids d'espacement identifiés dans le code ci-dessous qui devrait être assez facile:
<html>
<head>
<script language="javascript" type="text/javascript">
var myTags=null;
function init()
{
document.getElementById("txtHidden").onkeyup= runFormatter;
}
function focusHiddenInput()
{
document.getElementById("txtHidden").focus();
}
function runFormatter()
{
var txt = document.getElementById("txtHidden");
var txtdiv = document.getElementById("txtBoxDiv");
txtdiv.innerHTML = "";
formatText(txt.value, txtdiv);
}
function formatText(tagText, divTextBox)
{
var tagString="";
var newTag;
var newSpace;
myTags = tagText.split(' ');
for(i=0;i<myTags.length;i++) {
newTag = document.createElement("span");
newTag.setAttribute("id", "tagId_" + i);
newTag.setAttribute("title", myTags[i]);
newTag.setAttribute("innerText", myTags[i]);
if ((i % 2)==0) {
newTag.style.backgroundColor='#eee999';
}
else
{
newTag.style.backgroundColor='#ccceee';
}
divTextBox.appendChild(newTag);
newTag.onclick = function(){tagClickedHandler(this);}
newSpace = document.createElement("span");
newSpace.setAttribute("id", "spId_" + i);
newSpace.setAttribute("innerText", " ");
divTextBox.appendChild(newSpace);
newSpace.onclick = function(){spaceClickedHandler(this);}
}
}
function tagClickedHandler(tag)
{
alert('You clicked a tag:' + tag.title);
}
function spaceClickedHandler(spacer)
{
alert('You clicked a spacer');
}
window.onload=init;
</script>
</head>
<body>
<div id="txtBoxDivContainer">
Enter tags below (Click and Type):<div id="txtBoxDiv" style="border: solid 1px #cccccc; height:20px;width:400px;" onclick="focusHiddenInput();"></div>
<input id="txtHidden" style="width:0px;" type="text">
</div>
</body>
</html>
curseur
Vous pouvez Css le curseur à l'aide clignement (vérifiez support) ou non simplement avancer et se cacher au besoin un gif animé.
Oui, ça pourrait marcher :) –