次のasp.netコードがあります:
<script type="text/javascript">
$(document).ready(function () {$(".button").click(function (event) {
alert("Button pressed!");
});
});
</script>
<asp:Button ID="button" runat="server" CssClass="button" />
<asp:UpdatePanel ID="testUpdatePanel" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="testTextBox" EventName="TextChanged" />
</Triggers>
<ContentTemplate>
<asp:TextBox ID="testTextBox" runat="server" AutoPostBack="true" CausesValidation="true" ValidationGroup="test" CssClass="Test" />
<asp:RegularExpressionValidator ID="testRegularExpressionValidator" runat="server" ControlToValidate="testTextBox" ErrorMessage="*2" ValidationExpression="(19|20)\d\d\-(0[1-9]|1[012])\-([012][0-9]|3[01])" ValidationGroup="test" />
<asp:Label ID="testLabel" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
そして、次の分離コード:
Private Sub testTextBox_TextChanged(sender As Object, e As System.EventArgs) Handles testTextBox.TextChanged
If (Not Page.IsValid) Then
Return
End If
testLabel.Text = testTextBox.Text
End Sub
これをFF(v15、v15.0.1)で実行すると、テキストボックスに1987-05-03と入力してEnterキーを押すと、ボタンがトリガーされ、その後、testTextBox_TextChangedへのポストバックが返され、彼の行に到達するとIf (Not Page.IsValid)
取得されます次の例外:
Page.IsValid cannot be called before validation has taken place. It should be queried in the event handler for a control that has CausesValidation=True and initiated the postback, or after a call to Page.Validate.
IEで同じことをすると、ボタンがトリガーされることはなく、例外も発生しません! では、なぜ FF はこのように誤動作するのでしょうか。どのパネルにも DefaultButton を設定していません。