2012-04-02 3 views
1

У меня небольшая проблема, когда я не могу выбрать идентификатор элемента управления пользователя с помощью jquery. Пользовательский элемент управления представляет собой панель сообщений, которая появляется, когда происходит действие. Поэтому, когда страница загружается, эта панель сообщений не является частью страницы. Только когда пользователь взаимодействует со страницей, то есть добавляет изображение, которое панель сообщений показывает с сообщением.Выбор элемента управления Asp.net с использованием jquery

Страница управления

<asp:Panel ID="pan_cntrls" runat="server"> 
    <asp:Button ID="btnAddNewImg" runat="server" Text="Add new image" OnClick="btnAddNewImg_Click" 
     Visible="true" /> 
    <uc9:MessagePanel ID="messagepanel1" runat="server"></uc9:MessagePanel> 
</asp:Panel> 

Javascript

<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 
     $("#PageContent_IMG1_messagepanel1_divMessageBox").click(function() { 
      alert("handler called"); 
     }); 
    }); 

Что поджигатель показывает

<div class="errorBox confirmation" id="PageContent_IMG1_messagepanel1_divMessageBox" style="height: 50px;"> 

Я могу выбрать о thes ID, используя jquery, но не этот. Я также должен указать, что я использую modalpopupextender на странице. Поэтому, когда я отправляю данные, страница делает обратную передачу. Я попытался использовать делегат, потому что идентификатор добавляется в DOM после загрузки страницы, но не работает.

Любые идеи?

Благодаря

+0

Является ли это просто, как '##' в начале селектора jquery? - должен ли он быть единственным '#'? –

+0

Извините, это опечатка, где я вставил код. –

+0

ОК. Удалили. –

ответ

2

В основном проблема заключается в том, что вы добавляете обработчик в $(document).ready. Дивы еще не существуют, поэтому этот вызов ничего не делает.

Вам нужно прикрепить обработчик щелчка после того, как div попадет на страницу. Есть несколько способов, вы можете добиться этого:

Использования add_endRequest, поэтому выполнить document.ready код после асинхронных запросов:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function() { 
    $("#PageContent_IMG1_messagepanel1_divMessageBox").click(function() { 
     alert("handler called"); 
    }); 
}); 

или 2

Явных сделать функцию addHandler и вызвать ее с помощью инъекции из asp.net:

В JS:

function addHandler (ctrlID) { 
    $("#" + ctrlID).click(function() { 
     alert("handler called"); 
    }); 
}; 

В ASP.Net:

Использование RegisterStartupScript для вызова ДобавитьОбработчик, передавая ClientID элемента управления, который нуждается в обработчик добавление.См. here для получения информации о RegisterStartupScript.

Первый из этих вариантов менее эффективен, чем второй (поскольку он будет выполняться после всех обратных передач), но проще реализовать.

+0

Я не делал этого здесь, но вы должны использовать '<% = divMessageBox.ClientID%>' вместо жесткого кодирования полного идентификатора клиента, так как это будет возможно изменить при работе с другими элементами на странице. –

+0

Спасибо, это сработало! Я знал, что jquery не может видеть div, но не был уверен, как это исправить. –

0

Вы можете попробовать это

<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 
     $("#<%=PageContent_IMG1_messagepanel1_divMessageBox.ClientID%>").click(function() { 
      alert("handler called"); 
     }); 
    }); 

таким образом, вы собираетесь быть уверены, что это идентификатор на стороне клиента

Когда ASP.NET предоставляет стороне сервера управления дает им уникальные идентификаторы клиентов, отличные от идентификаторов их серверов, и если вы не уверены, вы можете проверить источник своей страницы ASP.NET.

+0

Ошибка компиляции Описание: Произошла ошибка во время компиляции ресурса, необходимого для обслуживания этого запроса. Ознакомьтесь с приведенными ниже конкретными данными об ошибках и соответствующим образом измените исходный код. Сообщение об ошибке компилятора: CS0103: имя «PageContent_IMG1_messagepanel1_divMessageBox» не существует в текущем контексте. –

+0

Его не является частью страницы при первой загрузке страницы. –

0

Чтобы получить пользовательский контроль I D на стороне клиента, вы должны установить его свойство ClientID.

Смежные вопросы