Я новичок в jQuery, но у меня есть несколько ссылок на моей странице, которые должны переключать разделы формы, видимые при нажатии, или, если javascript отключен, он выполняет полную обратную передачу для переключения этих разделов.
Он отлично работает в моей тестовой среде, при этом PostBack происходит после сценария jQuery, но как только я его развертываю, PostBack происходит до события click 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. На моей тестовой машине он отлично работает на всех трех. На моей рабочей машине только IE работает так, как должен.
alert
не всплывает, поэтому я предполагаю, что PostBack происходит до события click. Это означает, чтоstopPropagation
тоже не запустится (только что проверил, не помогает) - person Rachel   schedule 25.01.2012.ready()
- person Rachel   schedule 25.01.2012onClientClick
(onClick
пытается выполнить обратную передачу, так как это кнопка asp). Я все еще хотел бы знать, почему я не могу использовать синтаксис, который у меня есть, поскольку я бы предпочел, чтобы мой javascript не попадал в мои файлы asp, если это возможно. - person Rachel   schedule 25.01.2012debugger;
, и он сломается для вас. - person asawyer   schedule 25.01.2012