Also ich habe diese Kontrolle, die ich versuche zu machen. Es ist ein In-Place-Texteditor für eine Website, und die Grundidee ist, dass eine Beschriftung mit Text angezeigt wird. Wenn Sie auf den Text klicken, wird die Beschriftung ausgeblendet und an deren Stelle wird eine Textbox angezeigt, die der Benutzer bearbeiten kann die Daten.tabelle> tbody> tr> td> div> toggled span und textbox ohne die tischgröße ändern?
Das allgemeine Layout ist so etwas wie dieses (ids und der Übersichtlichkeit halber entfernt Ereignisse):
<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>
Das Problem ist also, dieses Setup ziemlich pingelig ist und ändert die Größe der Zellen, wenn die Spanne verschwindet und der Eingang zeigt nach oben . Mein übergeordnetes Ziel ist es, einige CSS für div, span und/oder input zu setzen, um das Ding ruhig zu halten. Ich hatte eine kleine Portion Glück mit der Position: Absolut auf der Div, aber der Text überläuft einfach seine Grenzen und wickelt sich nicht richtig in der Zelle.
Da dies ein Steuerelement ist, kann ich diese drei Elemente nach Bedarf verschieben oder andere Elemente hinzufügen, aber ich möchte wirklich die Tabelle, tbody, tr und td-Tags allein lassen.
Irgendwelche Ideen?
Edit:
Am Ende hatte ich so etwas wie dieses:
.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;
}
Mit einem Klick Event-Handler, der wie folgt aussieht:
function ShowInPlaceTextEditor(_this) {
var div = $(_this).closest('td');
div.css({ height: div.height(), width: div.width() });
$(_this).hide().next().show().focus().selectAllText();
}
und einen zugehörigen Handler das verbirgt das Textfeld, das wie folgt aussieht:
function HideInPlaceTextEditor(_this) {
$(_this).closest('td').css('height', '');
$(_this).hide().prev().html($(_this).val() == '' ? $(_this).closest('div').attr('emptyText') : $(_this).val()).show();
}
Danke an alle, die geholfen haben.
Das ist nicht das, was Sie fragen, aber wenn Sie jQuery verwenden, könnten Sie das jEditable-Plugin in Erwägung ziehen, anstatt ein eigenes In-Place-Bearbeitungs-Widget zu erstellen. http://www.appelsiini.net/projects/jeditable/default.html –