По сути, я хочу знать, как лучше всего скрыть / показать элемент управления ASP.NET из функции Javascript. Я решил, что просто получу доступ к элементу управления в Javascript, используя:
var theControl = document.getElementById("txtEditBox");
Затем просто установите для свойства Visible элемента управления значение true / false. Кажется, это не работает, я не могу понять, как установить "Visible" на true / false. Как я могу это сделать? Кроме того, это лучший способ скрыть / показать элемент управления ASP.NET из функции Javascript?
Спасибо, Джефф
Я проголосовал против нескольких из них, потому что они были не чем иным, как опоздавшими, повторявшими то, что уже было сказано парой человек, и они даже не хотят отвечать на все вопросы ОП, а просто дают одноразовый ответ. Ответ на этот вопрос сложнее, чем el.style.display = 'none'
Повторяющиеся ответы отделялись друг от друга примерно на минуту. Мы все формулировали свои ответы одновременно.
Я это понимаю; У SO есть функция, которая сообщит вам, если кто-то уже ответил на вопрос, и позволит вам затем загрузить их на страницу. Если кто-то видит, что другой уже дал такой же ответ, он должен воздержаться от публикации.
Если эта функция не работает по какой-либо причине, пользователь может удалить свое сообщение, как только он разместит, и заметить 4 других человека с точно таким же ответом, если, конечно, они не были «первыми» (сортировать по самым старым или самым новым и он скажет вам, кто «выиграл»). Меня просто тошнит от беспорядка из дурацких ответов.
Я проголосовал против 3 из 8 ответов (надо отдать ему должное, один пользователь удалил свой пост, как только понял, что дублирует то, что уже упоминали многие другие). И снова для меня более серьезная проблема заключается в том, что люди думают, что их однострочный ответ отвечает на все вопросы OP, когда это не так.





Свойство Visible элемента управления ASP.NET определяет, будет ли он отображаться на клиенте (т.е. отправляться клиенту). Если это ложь, когда страница отображается, она никогда не будет доставлена клиенту.
Таким образом, вы не можете, технически, установить это свойство элемента управления.
Тем не менее, если элемент управления является отображается на клиенте из-за того, что свойство Visible имеет значение true, когда страница отображается, вы можете скрыть его с помощью javascript следующим образом:
var theControl = document.getElementById("txtEditBox");
theControl.style.display = "none";
// to show it again:
theControl.style.display = "";
Это предполагает, что атрибут id элемента управления действительно является «txtEditBox» на клиенте и что он уже виден.
Also, is that the best way to hide/show a ASP.NET control from a Javascript function?
Не обязательно «лучший» способ, хотя лучший подход - использовать определения классов CSS:
.invisible { display: none; }
Если вы хотите что-то скрыть, динамически примените этот класс к элементу; когда вы захотите показать его снова, удалите его. Обратите внимание, я считаю, что это будет работать только для элементов, значение display которых начинается как block.
Какие еще варианты для "style.display"? Как мне показать это снова?
Понятия не имею ... но спасибо, что указали на безумное дублирование ... Я удалил свою копию: P
вместо использования visible установите для его css значение display: none
//css:
.invisible { display:none; }
//C#
txtEditBox.CssClass = 'invisible';
txtEditBox.CssClass = ''; // visible again
//javascript
document.getElementById('txtEditBox').className = 'invisible'
document.getElementById('txtEditBox').className = ''
Это должно скрыть элемент управления:
theControl.style.display = 'none';
Что это добавление? Все остальные уже повторяли это до тошноты. Это просто добавляет беспорядка на страницу.
Не говоря уже о том, что это даже не отвечает на все его вопросы. Попробуйте в следующий раз сформулировать более подробный и продуманный ответ, а не разово надеяться на очки репутации.
О, ты парень из VB ... это все объясняет. :П
Нет ничего лучше, чем препятствовать участию. Обратите внимание, что за то время, которое потребовалось, чтобы запустить то, что, как я надеялся, было полезным ключом в правильном направлении, группа других людей сделала то же самое. В следующий раз я обязательно позволю вам правильно модерировать все ответы, прежде чем пытаться быть полезным.
Установите стиль на «display: none».
var theControl = document.getElementById("<%= txtEditBox.ClientID %>");
theControl.style.display = "none";
Этот "txtEditBox.ClientID" - важный штрих - если он runat = "server", он вам понадобится каждый раз. +1
Он не нужен вам каждый раз - он нужен только в том случае, если элемент управления не находится непосредственно на странице, на которой нет главной страницы. Если он находится на простой странице ASPX, идентификатор останется прежним.
Вы правы ... Я привык всегда использовать главные страницы ASP.NET ... +1
Пользовательские элементы управления и шаблонные элементы управления также требуют, чтобы вы использовали Control.ClientID. Панель добавит к сгенерированному идентификатору
Совершенно верно - большинство людей пишут нетривиальные страницы, поэтому ваш ответ заслуживает внимания.
Немного поздно, но я только начал работать с ASP.NET, и этот фрагмент JavaScript мне помог. Спасибо! +1 :)
Для этого вы можете использовать свойство display. Но, как заметил Джейсон, это свойство DHTML DOM (на стороне клиента), которое полностью не зависит от свойства Visible ASP.NET (на стороне сервера), которое контролирует рендеринг.
theControl.style.display = "none";
Вы хотите установить для свойства стиля отображения значение «none» (чтобы скрыть) или null для отображения.
var theControl = document.getElementById("txtEditBox");
theControl.style.display = 'none';
theControl.style.display = null;
Делаем это способом jQuery:
$('#txtEditBox').hide();
$('#txtEditBox').show();
Вы не можете скрыть / показать версию элемента управления ASP.NET, поскольку она существует только в контексте сервера. Чтобы использовать JavaScript, вам нужно поиграть со стилем управления / состоянием видимости.
Единственный способ сделать это - обернуть элемент управления в UpdatePanel и получить что-то вроде этого:
<asp:UpdatePanel ID = "panel" runat = "server">
<ContentTemplate>
<asp:TextBox ID = "myTextBox" runat = "server" />
</ContentTemplate>
<Triggers>
<asp:AsynchronousPostbackTrigger ControlID = "button" EventName = "Click" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID = "button" runat = "server" OnClick = "toggle" Text = "Click!" />
Тогда вам понадобится это в вашем коде:
protected void toggle(object sender, EventArgs e){
myTextBox.Visibility = !myTextBox.Visibility;
}
Теперь, когда вы нажимаете кнопку, происходит асинхронная обратная передача, которая обновляет UpdatePanel.
Примечание: Это не решение хорошо, так как это будет очень тяжелый запрос AJAX, потому что вам нужно отправить ViewState.
Кроме того, это может быть не на 100% правильно, я сделал это по памяти.
Черт возьми - поговорим о долгом пути домой!
Эй, никогда не говорил, что это ХОРОШЕЕ решение, просто полностью .NET-решение;) Если вы не собираетесь использовать display = "none", то вы дурак! Я только что увидел, что каждое из этих решений было отклонено, подумал, может быть, нужно чистое решение ASP.NET: P
Страшно то, что мы с вами знаем, что это не совсем хороший способ сделать это, но я готов поспорить, что кто-то увидит ваше решение и подумает: «Эй, это отличный способ сделать это - без JavaScript !! ! " - эти люди меня пугают. :)
А затем мы отправляемся в ежедневный wtf! Я должен поместить этот код в свой блог как пример того, чего не следует делать.
Я согласен - иногда приятно иметь плохой пример. Черт возьми, я уверен, что часть моего кода с прошлой недели может служить плохим примером. Постоянно учусь ...
Или, если вы не хотите использовать css:
<asp:TextBox ID = "txtBox" runat = "server" style = "display:none;">
Я думаю, что лучшим решением будет поместить ваш ASP-элемент управления в div и установить свойство display на элемент div.
<div id = "divTest">
<asp:TextBox ID = "txtTest" runat = "server"></asp:TextBox>
</div>
<script type = "text/javascript">
SIN JQuery
document.getElementById('divTest').style.display = "none";
CON JQuery
$('#divTest').hide();
</script>
Почему все, кто ответил, были отвергнуты?