Я пытаюсь «создать один источник» страницы формы, которая может находиться в режиме редактирования или в режиме просмотра. По разным причинам в нем не используются элементы управления ASP.Net FormView или DetailsView.
Поскольку нет способа отключить текстовое поле, не сделав его содержимое серым (ну, мы могли бы «съесть» все нажатия клавиш в нем, но это тоже не очень элегантно) и отключить выпадающий список или список не То, что мы хотим, наша первая попытка состояла в том, чтобы дублировать все элементы управления вводом формы с меткой и использовать CSS, чтобы выбрать, какие из них видимы, в зависимости от режима формы. Это работает, но редактировать некрасиво, а выделенный код должен каждый раз заполнять оба элемента управления.
Мы могли бы контролировать видимость кода, чтобы не заполнять оба элемента управления, но нам все равно нужно добавить их оба в форму.
Поэтому у меня возникла идея использовать jQuery для замены элементов управления вводом для элементов <label>
, <div>
или <span>
. В некоторой степени это работает путем создания соответствующих селекторов и использования метода replace()
jQuery для динамического обмена элементами.
Проблема в том, что мне нужно не только копировать содержимое, но также стили, атрибуты и размеры исходных элементов управления вводом (на данный момент мы говорим только о текстовых полях - у нас есть другое решение для выпадающих списков и списки).
Должна работать грубая сила - «создать резервную копию» всех атрибутов элемента управления вводом, создать новый элемент «только для чтения», а затем заменить элемент управления вводом новым элементом. То, что я ищу, является чем-то более простым.
Вкратце, используя jQuery, как лучше всего заменить текстовое поле на метку, чтобы метка имела такое же содержимое и отображалась в том же месте и стиле, что и текстовое поле?
Вот что у меня есть:
$(":text").each( function() {
var oldClass = $(this).attr("class");
var oldId = $(this).attr("id");
var oldHeight = $(this).outerHeight();
var oldWidth = $(this).outerWidth();
var oldStyle = $(this).attr("style");
$(this).replaceWith("<div id='" + oldId + "'>" + $(this).val() + "</div>");
$("div#" + oldId).attr("class", oldClass);
$("div#" + oldId).attr("style", oldStyle);
$("div#" + oldId).width(oldWidth);
$("div#" + oldId).height(oldHeight);
$("div#" + oldId).css("display", "inline-block");
});