1

嗨,我有一个像这样的 html 按钮

<button type="button" runat="server" id="btnDelete" type="button" data-confirm-message="Deleting this page will permanently delete it from the system and it will not be recoverable. Are you sure you wish to continue?">delete</button>

生成这个html

<button onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(''); __doPostBack('ctl00$body$btnDelete','')" id="btnDelete" type="button"   data-confirm-message="Deleting this page will permanently delete it from the system and it will not be recoverable. Are you sure you wish to continue?">delete</button>

和一些 jQuery

$(document).ready(function () {

    $("#btnDelete").click(function () {
        return confirm($(this).data("confirm-message"));
    });

});

问题是无论确认是真是假,页面都会被发回,任何帮助都会很棒

4

4 回答 4

0

正如其他人所提到的,您有一个内联点击处理程序,该处理程序具有onclick提交表单的属性,并且每次都会击败您的 jQuery 点击处理程序。

尝试这个:

$(document).ready(function () {

    $("#btnDelete").removeAttr("onclick").click(function () {
        return confirm($(this).data("confirm-message"));
    });

});

它删除了该onclick属性,以便它可以处理点击本身。

于 2013-08-20T12:32:42.597 回答
0

最后我删除了点击事件并在确认为真后重新附加

 $(".document-confirm-delete").each(function (index, item) {
        var clickEvents = this.onclick;
        this.onclick = null;
        $(this).on("click", function () {
            if (Document.ConfirmDelete(this)) {
                clickEvents();
            }
        });
    });

感谢所有的帮助

于 2013-08-21T08:55:06.047 回答
0

如果您分析您的内联处理程序,您会看到每次单击按钮时都会执行回发__doPostBack('ctl00$body$btnDelete','')

if (typeof(Page_ClientValidate) == 'function') 
    Page_ClientValidate(''); 

__doPostBack('ctl00$body$btnDelete','') // this line is always reached on click

无论您是否false从 jQuery 单击处理程序返回,因为无论如何都会执行内联代码,这并不重要。

于 2013-08-20T11:52:30.890 回答
-1

我看到你正在使用.NET。防止回发的一种方法是为 ASP 按钮/链接按钮/等连接 OnClientClick。

OnClientClick="return confirm('Your Message');"

的响应false将阻止回发,然后您可以在OnClick处理程序中包含回发代码以进行true响应。这样的东西会起作用吗?

于 2013-08-20T12:19:42.243 回答