J'ai donc ce contrôle que j'essaie de faire. C'est un éditeur de texte sur place pour un site Web, et l'idée de base est qu'il affiche une étiquette avec du texte, et lorsque vous cliquez sur le texte, l'étiquette disparaît et une zone de texte apparaît à sa place, afin que l'utilisateur puisse modifier les données.table> tbody> tr> td> div> balise span et zone de texte sans redimensionnement de la table?
La disposition générale est quelque chose comme ça (id et événements pour plus de clarté):
<table>
<tbody>
<tr>
<td>
Some other cell, etc.
</td>
<td>
<div>
<span>When you click me, I'll disappear and show the input instead.</span>
<input type="textbox" style="display:none"/>
</div>
</td>
<tr>
</tbody>
</table>
Le problème est, cette configuration est assez difficile, et redimensionne les cellules lorsque la durée disparaît et l'entrée se présente . Mon objectif global est de pouvoir mettre du CSS sur la div, la span et/ou l'input, afin que cette chose reste immobile. J'ai eu un peu de chance avec la position: absolue sur la div, cependant, le texte déborde simplement ses limites, et ne s'enroule pas correctement dans la cellule. Comme il s'agit d'un contrôle, je peux déplacer ces trois éléments au besoin, ou ajouter d'autres éléments, mais je voudrais vraiment laisser les balises table, tbody, tr et td seules.
Des idées?
Edit:
En fin de compte, j'ai eu quelque chose comme ceci:
.inPlaceEditor
{
margin-right:0px;
margin-left:0px;
margin-top:0px;
margin-bottom:0px;
white-space:normal;
display:block;
width:100%;
height:100%;
}
.inPlaceEditor span
{
white-space:normal;
}
.inPlaceEditor input[type="textbox"]
{
display:none;
width:100%;
border:solid 0px black;
margin-top:0px;
margin-bottom:0px;
padding-bottom:0px;
padding-top:0px;
padding-left:0px;
}
Avec un gestionnaire d'événements de clic qui ressemble à ceci:
function ShowInPlaceTextEditor(_this) {
var div = $(_this).closest('td');
div.css({ height: div.height(), width: div.width() });
$(_this).hide().next().show().focus().selectAllText();
}
Et un gestionnaire associé qui cache la zone de texte qui ressemble à ceci:
function HideInPlaceTextEditor(_this) {
$(_this).closest('td').css('height', '');
$(_this).hide().prev().html($(_this).val() == '' ? $(_this).closest('div').attr('emptyText') : $(_this).val()).show();
}
Merci à tous ceux qui ont aidé.
Ce n'est pas ce que vous demandez, mais si vous utilisez jQuery, vous pouvez envisager le plugin jEditable plutôt que de lancer votre propre widget d'édition sur place. http://www.appelsiini.net/projects/jeditable/default.html –