0

我知道如何防止 href 属性中的 javscript 触发,这在这个 JSFiddle ( http://jsfiddle.net/mkarr/KNefK/ )中很明显

但是,当将此逻辑应用于 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),因此我无法回答自己的问题,因此这里有一个带有答案的编辑:

关闭@QBM5 的不使用 ASP.Net 控件的原始提示,我解决了问题,虽然我仍然不知道为什么最初会出现问题(有没有人提到 ASP.Net?关掉它,然后回到这里):o)

我用LinkButton以下内容替换了 ASP.Net 控件:

<input type="submit" value="Submit" id="btnSubmitButton" runat="server" OnServerClick="btnSubmitButton_Click" class="submitBtn" />

.submitBtn然后我通过 jQuery绑定了click 事件:

$('.submitBtn').on('click', function (e) {
    if (!instance.validate()) {
        e.preventDefault();
    }
});

诀窍是使用OnServerClickrunat="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