この JSFiddle ( http://jsfiddle.net/mkarr/KNefK/ )で明らかなように、href 属性内の javascript が起動しないようにする方法を知っています。
ただし、このロジックが ASP.Net LinkButton にそのまま適用されると、次のようになります。
<asp:LinkButton ID="btnSubmit" runat="server" Text="Submit" OnClientClick="return formTest.validate(event);" OnClick="btnSubmit_Click"></asp:LinkButton>
これは次のように変換されます。
<a onclick="return formTest.validate(event);" id="ctl00_m_g_87932399_e546_4e12_8297_982b811d8cea_ctl00_btnSubmit" href="javascript:WebForm_DoPostBackWithOptions('blah blah blah')">Submit</a>
formTest.validate() メソッドは正しく実行され、false を返しますが、WebForm_DoPostBackWithOptions
常に直後に起動されます!
私には見えない私の論理の欠陥を誰かが見ることができますか??
編集:
また、この問題に対していくつかのスタック オーバーフロー ソリューションが受け入れられていますが、それらはすべて、私が既に行ったことと事実上同じことを行っているため、何か単純なものが欠けていると思います。
答え:
私はまだ評判が良くないので(LOL)、自分の質問に答えることができないので、ここに答えを編集します:
ASP.Net コントロールを使用しないという @QBM5 の元のヒントから外れて、問題を解決しましたが、最初の問題が最初に発生した理由はまだわかりません (ASP.Net に関しては、誰かがそれをオフにしてから、戻ってここで頭に浮かぶ) :o)
LinkButton
ASP.Net コントロールを次のものに置き換えました。
<input type="submit" value="Submit" id="btnSubmitButton" runat="server" OnServerClick="btnSubmitButton_Click" class="submitBtn" />
.submitBtn
次に、 jQuery を介して のクリック イベントをバインドします。
$('.submitBtn').on('click', function (e) {
if (!instance.validate()) {
e.preventDefault();
}
});
トリックはコントロールでOnServerClick
andを使用することですが、目的から逃れることが目的であり、ポストバックの動作はまったく異なります。runat="server"
LinkButton
これは次のようになります。
<input onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(''); " type="submit" id="ctl00_m_g_87932399_e546_4e12_8297_982b811d8cea_ctl00_btnSubmitButton" value="Submit" class="submitBtn">
根本原因を突き止めたい人はいますか?先に進まなければならないので、時間がありません。:o)