天天看点

关于jConfirm回传的解决方案

在昨天lastwinter留言关于jconfirm的问题,如下

关于jConfirm回传的解决方案
我趁今天有空就考虑了下。我觉得lastwinter问这个问题应该是关于asp.net的回传问题,这主要是jconfirm这个为callback回调,

他是异步的,并非同步。

所以我尝试了下阻止事件的冒泡,并当选择为true是自动回传。用linkbutton测试(button不同于这个解决的方案在后面解释)

现贴出linkbutton的code demo:

关于jconfirm回传demo

<%@ page language="c#" autoeventwireup="true" codefile="default.aspx.cs" inherits="_default" %>

<head runat="server"> 

    <title></title>

    <script src="script/jquery-1.3.2.min.js" type="text/javascript"></script> 

    <script src="script/jquery.alerts-1.1/jquery.alerts.js" type="text/javascript"></script>

    <link href="script/jquery.alerts-1.1/jquery.alerts.css" rel="stylesheet" type="text/css" /> 

</head> 

<body> 

    <form id="form1" runat="server"> 

    <asp:linkbutton id="linkbutton1" runat="server" onclick="button1_click" >linkbutton</asp:linkbutton> 

    <asp:label id="label1" runat="server" text="label"></asp:label> 

    <div> 

    </div> 

    </form>

    <script type="text/javascript"> 

        $(document).ready(function() { 

            $("#<%=linkbutton1.clientid %>").click(function(event) {

            jconfirm("test", "test jconfirm", function(r) { 

            if (r) { 

                    <%= page.clientscript.getpostbackclienthyperlink(linkbutton1,"") %> 

                    } 

                }); 

                event.stoppropagation(); 

                event.preventdefault();

            });

        }); 

    </script>

</body> 

</html>

linkbutton1 button click code

protected void button1_click(object sender, eventargs e) 

   { 

       this.label1.text = datetime.now.tostring(); 

   }

主要为先阻止事件的冒泡event.stoppropagation();event.preventdefault(); 在jconfirm的callback回调函数中判断是否需要回传,

<%= page.clientscript.getpostbackclienthyperlink(linkbutton1,"") %>;;

点击linkbutton1是效果为:

关于jConfirm回传的解决方案

点击cancel时候就不会回传,当ok时候就会发生回传更新时间:

关于jConfirm回传的解决方案
对于我们的linkbutton的实现是在输出的客户端html代码有脚本自动回传,而button这是html元素submit,提交,

所以在这两个的区别下,linkbutton就多了几处javascript 代码:

<script type="text/javascript">

//<![cdata[

var theform = document.forms['form1'];

if (!theform) {

theform = document.form1;

}

function __dopostback(eventtarget, eventargument) {

if (!theform.onsubmit || (theform.onsubmit() != false)) {

theform.__eventtarget.value = eventtarget;

theform.__eventargument.value = eventargument;

theform.submit();

//]]>

</script>

和 input hidden

<input type="hidden" name="__eventtarget" id="__eventtarget" value="" />

<input type="hidden" name="__eventargument" id="__eventargument" value="" />

上面所说的意思就是如果要用button实现同样的示例,我们必须保证我的输出客户端的代码有这些回传脚本注册,还有就是回传为

<%=page.clientscript.getpostbackeventreference(button1,"") %>。所以我觉得用linkbutton更适合。

继续阅读