0

この JSFiddle ( http://jsfiddle.net/mkarr/KNefK/ )で明らかなように、href 属性内の javascript が起動しないようにする方法を知っています。

ただし、このロジックが ASP.Net LinkBut​​ton にそのまま適用されると、次のようになります。

<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)

LinkButtonASP.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();
    }
});

トリックはコントロールでOnServerClickandを使用することですが、目的から逃れることが目的であり、ポストバックの動作はまったく異なります。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)

4

0 に答える 0