jQueryの新機能ですが、クリックしたときにフォームのセクションを切り替える必要があるページ上のリンクがいくつかあります。JavaScriptが無効になっていると、それらのセクションを切り替えるために完全なポストバックが行われますjQueryのクリックイベントの前にポストバックが発生するのはなぜですか?
私のテスト環境では、jQueryスクリプトの後にPostBackが発生しますが、PostBackはjQueryのクリックイベントの前に発生します。テスト環境はWindows XP/IIS 5.1/VS2010ですが、IIS 6.0を実行するWindows 2003サーバーに展開されています。
私が使用しているコードは次のとおりです。私がの代わりに.click()
に入れると、スクリプトは本番環境で実行されますが、.click()
でも警告が表示されないため、jQueryスクリプトが実行される前にPostBackが発生していると想定しています。
の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>
編集
以下のコメントで、onClientClick
でjQuery関数を実行すると、ページが正常に動作するようになりますが、私のテスト環境のjQueryイベントの後、プロダクションのjQueryイベントの前にPostBackがなぜ発生するのかを知りたいと思います。
私は2つの違いも気づきました。たとえば、テストでは正常に動作するが、本番では動作しない検索divのオン/オフを切り替えるボタンもあります。 $('.toggleSearchButton').next()
を使用して検索ボタンの下にあるdivを取得し、そのクラス名をトグルします。プロダクションでは、このオブジェクトは[object Object]
を返しますが、.attr('class')
はundefined
を返します(.attr('id')
,.attr('tag')
、.nodeName
)。私のテスト環境では、私の検索divの正しい値を返します。
IE、FF、Chromeでこの動作をテストしました。私のテストマシンでは、すべて3で正常に動作します。私のプロダクションマシンでは、IEのみが動作するはずです。
の背後には、参照します。 – asawyer
@asawyer 'alert 'はポップアップしないので、PostBackがclickイベントの前に発生していると仮定しています。これは 'stopPropagation'も実行されないことを意味します(テストしただけでそれは助けになりません) – Rachel
あなたのページの最初または最後にjQueryを配置しましたか? –