Как обрабатывать ID элементов при использовании пользовательских элементов управления jQuery и ASP.NET
У меня есть некоторые пользовательские элементы управления в ASP.NET, которые я использую как простой HTML, то есть без какого-либо кода позади.
У меня один элемент управления, у меня есть элемент с фиксированным идентификатором, и я указываю на него некоторыми клиентскими скриптами jQuery. Например:
<div id="slider-section"></div>
<script type="text/javascript" language="javascript">
$(document).ready(function () {
var slider = $('#slider-section');
// ... do something with the jQuery Object
});
</script>
Это работает очень хорошо без каких-либо проблем. Но есть побочный эффект с этим. Фактически, если я добавлю два экземпляра одного и того же пользовательского элемента управления на мою страницу, у меня будет два элемента с одинаковым идентификатором.
Какой, по вашему мнению, хороший способ справиться с такой ситуацией?
Спасибо
6 ответов
Если вы добавили runat="server"
к вашим простым элементам управления HTML, то они будут иметь уникальный идентификатор страницы клиента, как и все другие элементы управления сервером. Код за кодом не требуется.
Например
<div id="slider-section" runat="server"></div>
<script type="text/javascript" language="javascript">
$(document).ready(function () {
var slider = $('#<%=slider-section.ClientID %>');
// ... do something with the jQuery Object
});
</script>
Контроллеры Asp.net при визуализации на стороне клиента создают другой идентификатор, например:
Вы определяете текстовое поле:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
если вы проверите исходный код страницы, вы заметите, что идентификатор текстового поля будет выглядеть примерно так:
id="{GUID}_Textbox1"
так что вам нужно использовать селектор, чтобы найти конец идентификатора, например так:
<div id="slider-section"></div>
<script type="text/javascript" language="javascript">
$(document).ready(function () {
var slider = $('input[id$='TextBox1']').{youroptions};
// ... do something with the jQuery Object
});
</script>
проверьте документацию здесь: http://api.jquery.com/category/selectors/
наслаждаться;)
Хотя браузеры могут не жаловаться на несколько идентичных идентификаторов, неправильно размещать их на HTML-странице.
Ваша настоящая проблема заключается в том, что вам нужно изменить код ASP.NET, который добавляет пользовательский элемент управления, чтобы все идентификаторы были уникальными. Тогда ваша проблема с jQuery также исчезнет!
Я не уверен, что полностью понимаю ваш вопрос, но основываясь на том, что, по-вашему, вы спрашиваете; Решит ли ваша проблема изменение селектора jQuery для использования класса элемента html? Может быть, что-то вроде этого будет работать для вас:
<div id="slider-section1" class="slider-section"></div>
<div id="slider-section2" class="slider-section"></div>
<script type="text/javascript" language="javascript">
$(document).ready(function () {
var slider = $('.slider-section');
// ... do something with the jQuery Object
});
</script>
ps Не рекомендуется размещать на странице элементы html с одинаковым идентификатором / именем, даже если браузер их поддерживает.
Весь смысл идентификатора заключается в уникальной идентификации элементов. Если вы хотите "сгруппировать" элементы вместе, вы должны дать им то же самое class
,
Это довольно хорошее объяснение. http://css-tricks.com/818-the-difference-between-id-and-class/
Прочитайте clientID
элемента управления в вашей разметке и поместите его в переменную JavaScript или непосредственно в вашу функцию jQuery.
то есть:
<div id="slider-section"></div>
<script type="text/javascript" language="javascript">
$(document).ready(function () {
var slider = $('#<%= yourControl.ClientID %>');
// ... do something with the jQuery Object
});
</script>