#jquery #asp.net #jquery-ui
#jquery #asp.net #jquery-пользовательский интерфейс
Вопрос:
Не знаю, возможно ли это..
У меня есть ASP.Net страница, на которой есть скрытый div. Когда пользователь выполняет какую-то определенную функцию, div становится видимым ( display='block'
). Это происходит в VB.Чистый код отстает по многим причинам.
dvDetail.Style("display") = "block"
Мне нужно, чтобы какой-нибудь jQuery назначил плагин для текстового поля, которое находится в скрытом div, но у меня возникла проблема с этим — я немного новичок в jQuery. Кажется, что текстовое поле не существует на странице после его загрузки из-за display='none'
div в то время, и к тому времени, когда пользователь выполняет действие, которое вызывает отображение div, для этого слишком поздно, $(document).ready
потому что оно уже запущено. Я протестировал функциональность в нескрытой части страницы, и jQuery работает просто отлично.
В ответ на многие из ваших прекрасных ответов — следующий тестовый код максимально приближен к тому, что мне действительно нужно — он действительно работает, но это приводит к тому, что скрытый div становится видимым при первой загрузке страницы, что мне не нужно.
$(document).ready(function () {
$('[id$=dvDetail]').show(function () {
$('[id$=btnDelete]').click(function () {
alert('Delete clicked');
});
});
});
Комментарии:
1. Пока элемент отображается на странице, jQuery должен иметь возможность выбирать этот элемент, когда указан соответствующий селектор. Можете ли вы опубликовать HTML-рендеринг на странице и как вы его выбираете?
Ответ №1:
У меня нет опыта с asp.net но если элемент (div) загружен в DOM, jQuery должен быть в состоянии найти его, скрыт он или нет. Вы проверили, действительно ли элемент загружается в DOM. Вы могли бы проверить это (и отладить javascript) с помощью инструментов разработчика Chrome или firebug от FF.
Комментарии:
1. Div не загружается в dom при загрузке страницы, насколько я могу судить, из-за атрибута display = ‘none’ в div. Позже он будет загружен строкой кода из моего оригинального поста выше.
Ответ №2:
Попробуйте поместить свой код jquery за пределы $(document).готовая функция, но убедитесь, что она существует после текстового поля html.
Комментарии:
1. Я не эксперт в jQuery — использовал его немного около года. Противоречит ли это тому, для чего был разработан jQuery? Просто спрашиваю, поскольку во всем, что я когда-либо читал о jQuery, говорится, что он предназначен для размещения внутри $ (document). готовая функция.
Ответ №3:
Есть разница между ASP.NET свойство control .Visible = False
и атрибут CSS display: none
— если для элемента управления установлено значение .Visible = False
, элемент управления никогда не отображается на стороне клиента, и в результате никакие клиентские скрипты не смогут его найти.
Проверьте, как сказал jcane86, чтобы убедиться, что элемент управления действительно отображается на стороне клиента — он может не отображаться, но он должен быть в фактическом выводе HTML страницы. Если он там есть, jQuery должен быть в состоянии его найти (и если вы отлаживаете Javascript с помощью выбранных вами инструментов браузера, вы можете протестировать с $("#MyClientSideId").show()
в своей консоли JavaScript, как сказал Хантер).
Комментарии:
1. Div определен в HTML-коде как display=’none’, Стиль div установлен в dvDetail. Стиль («отображать») = «блокировать» в последующем коде действием пользователя. Свойство visable никогда не используется.
Ответ №4:
Вы можете получить все скрытые элементы следующим образом:
$("div:hidden").each(function(){
alert($(this).attr("id"));
});
Надеюсь, это поможет
Комментарии:
1. Есть ли способ сделать это с помощью селектора имен вместо селектора элементов? Я пробовал $ (‘[id $ = dvDetail]:hidden’).each(функция () но, похоже, не работает. Проблема с выбором типа заключается в том, что у меня есть 3 скрытых divs на странице.
2. Насколько я знаю, ASP.NET прикрепляет идентификатор к разделам в определенном формате. Можете ли вы получить этот формат, а затем применить фильтр для выбора элементов с соответствующим шаблоном?
3. Селектор имен работает. Я использовал оба $ (‘[id $ =dvDetail]’) и $ (‘#<%=dvDetail.ClientID %>’), и они оба разрешают проблему клиента ASP.Net искаженное имя в порядке. На моей странице оно преобразуется в $ (‘#MainContent_dvDetail’)
4. Также только что попробовал использовать фактическое разрешенное имя $ (‘#MainContent_dvDetail:hidden’), которое также не сработало.
Ответ №5:
Рассмотрим следующий html:
<div style="" id="hide">
<textarea ></textarea>
</div>
Я могу манипулировать скрытым текстовым полем с помощью jquery, а затем показывать его в конце цепочки.
$("#hide").children('textarea')
.text('hello there')
.css({width: '300px', height: '300px', padding: '5px', border: '1px solid #ccc'})
.parent().show();
Надеюсь, это поможет. Приветствия
PS: Если элемент загружается позже, например, после завершения подготовки документа, вам нужно будет привязать событие, чтобы приведенный выше код заработал, используя метод .bind() или мой любимый .делегировать()
Комментарии:
1. Да — это будет отлично работать, и мне, возможно, в конечном итоге придется перенести все скрытие и отображение клиентской части divs. Прямо сейчас мне выгодно отобразить этот скрытый div из кода на стороне сервера, поэтому я пытаюсь решить проблему в рамках этого сценария — bind () и delegete () выглядят интересно. Я не знаком с ними и проверю это — спасибо.