Получение идентификатора встроенного ASP-объекта с использованием JavaScript и jQuery
-
07-07-2019 - |
Вопрос
Я использую jQuery для попытки запуска метода, когда ASP.NET (2.0) событие изменения выпадающего списка обрабатывается jQuery. Проблема заключается в том, что раскрывающийся список находится внутри вида сетки и даже тогда, только когда пользователь решил редактировать строку в этом виде сетки.
Я думаю, что он собирает объект с помощью блока кода ASP, но проблема в том, что при первой загрузке страницы индекс редактирования строки не существует и выдает ошибку. Помещение блока внутрь оператора IF
также не работает.
$(document).ready(function() //when DOM is ready, run containing code
{
<% if (grvTimeSheets.EditIndex > -1) {%>
$(#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>).change(function() {
$(#<%= grvTimeSheets.ClientID %>).block({ message: null }
});
}
);
<% } %>
Это была одна попытка, которую я предпринял, и я также попытался поместить ASP-код оператора IF вне блока JavaScript. Это тоже не работает.
Как я могу применить событие jQuery к выпадающему списку? В идеале как можно более кратким.
<Ч>Спасибо за ответ, но нет, он не работает :(. Кажется, код JavaScript не выводится ... Смущает ...
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>
<script type="text/javascript" src="jquery.blockUI.js"></script>
<script type="text/javascript">
$(document).ready(function() //When DOM is ready, run the containing code
{
}
);
</script>
Это выход. Хотя это код:
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>
<script type="text/javascript" src="jquery.blockUI.js"></script>
<script type="text/javascript">
$(document).ready(function() //when DOM is ready, run containing code
{<% if (grvTimeSheets.EditIndex > -1) {%>
var id = '#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>';
$(id).change(function() {
$(id).block({ message: null }
});
<% } %>
}
);
</script>
Он делал это и раньше, сводя меня с ума.
<Ч>Извините, не могли бы вы сделать это немного яснее. Я попытался определить всю вещь в коде так:
DropDownList ddl (DropDownList)grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients");
if (ddl != null)
{
ClientScriptManager csm = Page.ClientScript;
Type cstype = this.GetType();
String csname1 = "PopupScript";
string script = @"
<script language='javascript' type='text/javascript'>
$(#" + ddl.ClientID + ").change(function() { $(" + grvTimeSheets.ClientID + ").blockUI({ message: null }});} </script>";
csm.RegisterStartupScript(cstype, csname1, script, true);
}
Это то, что вы имели в виду?
Кстати, вышесказанное не сработало. Нет ошибок, просто нет событий.
Решение
Несколько вещей здесь.
<Ол> $ ()
. Приведенный выше фрагмент кода генерирует что-то вроде $ (# some-generate-id)
, что не сработает. Попробуйте это:
$(document).ready(function() //when DOM is ready, run containing code
{
<% if (grvTimeSheets.EditIndex > -1) {%>
var id = '#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>';
$(id).change(function() {
$(id).block({ message: null }
});
<% } %>
}
);
Если это не сработает, вставьте сгенерированный javascript.
Другие советы
Используйте это:
cs.RegisterClientScriptBlock(cstype, csname, cstext2.ToString(), False)
Неверно создавать теги сценария, поскольку вы их включаете. Документация MSDN неверна в том, как она объясняет флаг.
Кроме того, просто поместите идентификаторы клиента ваших элементов управления в отдельные переменные из кода, а не в jQuery. code.
Затем используйте переменные, содержащие идентификаторы, в коде jQuery.
Внутри вашего блока скрипта, который вы создаете в коде позади:
string script = @"<script type=text/javascript> var myControlId = '" + ddl.ClientId "';") + "</script>"
Я не проверял этот синтаксис, но он должен быть закрыт. Вы можете добавить дополнительный синтаксис для grvTimeSheets.ClientID
самостоятельно. Если это работает, то вы можете изменить его, чтобы построить массив JavaScript и таким образом сохранить ClientId, и тогда у вас будет только одна глобальная переменная JavaScript, с которой вам нужно работать.
Другой вариант - просто дать элементу, который вы ищете, имя класса, которое описывает его поведение. Тогда ваш код jQuery станет действительно понятным:
$(function() {
$("select.yourMarkerClass").change(....);
});
Если строки редактирования нет, этот код ничего не делает. Если есть элемент, соответствующий селектору, вы добавите новое поведение.
Если вы не используете этот идентификатор в другом месте на странице, вы можете помешать ASP. Уникальный идентификатор NET с одним из расширенных селекторов jQuery:
$('[id$=ddlClients]')
Это соответствует только концу строки идентификатора, а не всему. Помните, что если элемент управления присутствует несколько раз в разных строках, он будет соответствовать всем экземплярам.
См. Селекторы для получения дополнительных примеров.
Вот пример моего JavaScript во внешнем файле:
var myFancySelector = '#' + myControlId;
selectedValue = $(myFancySelector).val();
myControlId определяется из кода и регистрируется в ClientScriptBlock.
Ключ может быть любым, но уникальным.
Я попробую больше после выходных. Это был код:
DropDownList ddl = (DropDownList)grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients");
if (ddl != null)
{
ClientScriptManager csm = Page.ClientScript;
Type cstype = this.GetType();
String csname1 = "PopupScript";
string script = @"
<script language='javascript' type='text/javascript'>
jQuery(#" + ddl.ClientID + ").change(function() { $(" + grvTimeSheets.ClientID + ").blockUI({ message: null }});} </script>";
csm.RegisterStartupScript(cstype, csname1, script, false);
Потому что у вас есть выпадающий список в каждой строке. У каждого выпадающего списка будет уникальный ClientId, поэтому я предлагаю сделать то, что предложил Бен, и использовать селектор классов, так как это самое простое решение.
Или вы можете создать функцию JavaScript по щелчку мыши, а затем получить уникальный идентификатор клиента вашего раскрывающегося списка в редактируемой строке.
Извините, я должен был прочитать ваш код ближе.