通过jQuery在asp:LinkButton点击事件上弹出确认对话框

4
考虑一个ASP.NET WebForms应用程序,要求在单击asp:LinkButton时弹出确认对话框。确认对话框的结果应允许或阻止linkButton_click方法的回发。
目前使用的插件/库是jquery.alerts.js(在ABeautifulSite上找到)。
<script src="http://labs.abeautifulsite.net/projects/js/jquery/alerts/demo/jquery.js"
    type="text/javascript"></script>
<script src="http://labs.abeautifulsite.net/projects/js/jquery/alerts/demo/jquery.ui.draggable.js"
    type="text/javascript"></script>
<!-- Core files -->
<script src="http://labs.abeautifulsite.net/projects/js/jquery/alerts/demo/jquery.alerts.js"
    type="text/javascript"></script>
<link href="http://labs.abeautifulsite.net/projects/js/jquery/alerts/demo/jquery.alerts.css"
    rel="stylesheet" type="text/css"   />

     <asp:LinkButton runat="server" ID="lnkDisable" 
Text="Disable This Emp" onclick="lnkDisable_Click" />

<script type="text/javascript">
    $(document).ready(function() {

        $("#ctl00_mainContent_lnkDisable").click(function() {
            jConfirm('Please confirm this emp should be disabled?', 
                     'Confirm Disable', 
                     function(r) {
                                jAlert('Confirmed: ' + r, 'Results');
                });
            }); 
        });         
</script>

alt text

消息框已经正常弹出!

问题 问题在于它只显示了大约2秒钟,然后在用户选择弹出窗口上的选项之前就提交了页面。我已经在事件处理程序上设置了断点,并且确实提交了页面。

问题 当用户在弹出窗口上做出决定并单击“确定”或“取消”按钮时,如何延迟提交页面?

欢迎提出有关其他插件的建议!

4个回答

3
我认为您需要:

我认为您需要:

return jConfirm('Please confirm this emp should be disabled?', 

(注意添加'return'语句)。

但我不完全确定'jConfirm'函数的工作方式。

-- 编辑

可能(实际上很可能)那个对话框不是模态的。看看能否找出如何使其成为模态(或更可能有人会回复)。

使用典型的JavaScript确认,您可以执行...

return confirm("Are you sure?");

但我猜你想要一个漂亮的:)
- 编辑
考虑到它不能被制作成模态框,也许可以做出类似以下的效果:
    var confirmed = false;
    $("#ctl00_mainContent_lnkDisable").click(function() {
        if( confirmed ){ return true; }

        jConfirm('Please confirm this emp should be disabled?', 
                 'Confirm Disable', 
                 function(r) {
                            jAlert('Confirmed: ' + r, 'Results');
                            confirmed = true;
                            #("ctl00_mainContent_lnkDisable").click();
                            confirmed = false;
            });
        });

        return false;
    });

这个方法未经测试,有些愚蠢(我不确定调用.click()会否再次触发事件,因此需要布尔变量),但是它应该有效。


谢谢Silky...确实返回值听起来很合理,也可能是最终解决方案的一部分。然而,在这种情况下,它并没有阻止postback的发生。 - p.campbell
pcampbell:我理解了,我猜你需要确定如何使该对话框模态。这可能是该函数中的一个选项/参数。 - Noon Silk
在快速阅读了该网站后,似乎无法将它们设置为模态。这有点烦人。那么你需要做的就有点复杂了。我会更新主帖。 - Noon Silk
如果我需要同样的东西用于网格视图中的链接按钮,怎么办? - Developer

0

我按照以下方式操作,它能够正常工作:

            var confirmed = false;
            $(".removeItemLink").click(function() {
                if (confirmed) { return true; }

                var clickedObj = $(this);
                jConfirm('Are you sure you want to remove this item?',
                 'Confirm Removal',
                 function(r) {
                     if (r) {
                         confirmed = true;
                         clickedObj.click();
                         confirmed = false;
                     }
                 });

                return confirmed;
            });

@Silky - 谢谢。


@Krunal:谢谢你的回答。不幸的是,它对我没有起作用。 - p.campbell

0

你可以使用jQuery来“点击”一个隐藏的按钮。也许像这样:

$(".removeItemLink").click(function() {
  var clickedObj = $(this);
  jConfirm('Are you sure you want to remove this item?',
    'Confirm Removal',
    function(r) {
      if (r) {
       clickedObj.parent().find(".hidden-button-with-event").click();
      }
  });
});

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接