Я довольно новичок в jQuery, но у меня есть некоторые ссылки на моей странице, которые должны переключать разделы формы, видимые при щелчке, или, если javascript отключен, он делает полный постбэк для переключения этих разделов
Он отлично работает в моей тестовой среде, когда PostBack происходит после сценария jQuery, но после его развертывания PostBack происходит до события щелчка jQuery. Он развернут на сервере Windows 2003 под управлением IIS 6.0, а моя тестовая среда - Windows XP / IIS 5.1 / VS2010
Вот код, который я использую. Сценарий запускается в производственном режиме, если я поставлю его в .ready()
вместо .click()
, но в .click()
я даже не получу оповещение, поэтому я предполагаю, что проблема связана с PostBack до того, как сценарий jQuery будет иметь шанс выполнить.
JQuery:
$(document).ready(function () {
// Toggle Details
$('.toggleDetailsButton').click(function () {
alert('test');
$(this).parentsUntil(".parentRow").parent().next().toggleClass("hidden");
return false;
});
});
Код-за:
Protected Sub rpData_ItemCommand(ByVal sender As Object, ByVal e As RepeaterCommandEventArgs) Handles rpData.ItemCommand
// Manually toggle rows here
End Sub
ASP:
<asp:Repeater ID="rpData" runat="server">
<ItemTemplate>
<tr class="parentRow">
...
<asp:Button runat="server" ID="cmdViewDetails"
CommandName="ToggleDetails" Text="details"
CssClass="buttonAsLink toggleDetailsButton" />
...
</tr>
<tr id="rpData_DetailsRow" class="detailsRow hidden" runat="server">
</tr>
</ItemTemplate>
</asp:Repeater>
Редактировать
Согласно предложению в комментариях ниже, запуск функции jQuery в onClientClick
заставляет страницу работать как следует, однако я все еще хочу знать, почему PostBack происходит после события jQuery в моей тестовой среде, но до jQuery. событие в производстве.
Я заметил и другие различия между ними. Например, у меня также есть кнопка, которая включает / выключает поисковый элемент, который отлично работает в тестировании, но не в производстве. Он использует $('.toggleSearchButton').next()
, чтобы получить div под кнопкой поиска и переключает его имя класса. В производстве этот объект возвращает [object Object]
, однако при вызове .attr('class')
возвращается undefined
(так же, как .attr('id')
, .attr('tag')
и .nodeName
). В моей тестовой среде он возвращает правильные значения для моего поискового div.
Я проверял это поведение в IE, FF и Chrome. На моей тестовой машине все отлично работает на всех 3. На моей рабочей машине только IE работает так, как должен.