必须单击两次ASP.net按钮才能进行jquery函数调用

时间:2013-04-17 20:31:25

标签: jquery asp.net postback

我需要什么:我有需要更改和更新的工作代码。我有一个模态控件(就像一个弹出框),可以通过单击按钮调用。现在,我需要在vb.net代码中计算一些东西,然后决定调用它。 (出现弹出框)

问题:它被调用,但我必须在我的按钮上单击两次。调用仅在CssClass设置如下时发生:CssClass="osx ImageButton100"

背景:我正在使用的模态控件:http://www.ericmmartin.com/projects/simplemodal-demos/

所做的更改:

Before:

 <asp:Button ID="btnCheckOut" runat="server" Text="Preview Order" CssClass="osx ImageButton100"        />

现在:

 <asp:Button ID="btnCheckOut" runat="server" Text="Preview Order"   />
  btnCheckOut.CssClass = "osx ImageButton100"

完整代码:

http://forums.asp.net/post/5367139.aspx

1 个答案:

答案 0 :(得分:1)

在您的代码隐藏中,Utils.MessageBox是什么? (从按钮单击事件处理程序调用)。

无论如何,我认为你的代码表现得像设计的那样。步骤进行:

  1. 用户点击按钮。
  2. 发生回发,服务器端代码设置按钮上的属性,将其配置为显示弹出窗口。
  3. 页面回复已发回客户端。
  4. 用户再次点击按钮,现在它显示一个模态(因为它的类已配置)。
  5. 您通过发出回发来破坏客户端代码的流程(按钮单击调用服务器端事件处理程序)。有几种选择如何进行流程:

    1. 继续使用回发,但让服务器端代码注册一个“启动”脚本,以便在javascript页面加载事件上执行。但这可能有点笨拙,特别是如果用户刷新页面。
    2. 按住按钮单击执行回调而不是回发。有几种不同的方法可以解决这个问题,我建议使用WebForms UpdatePanel方法。
    3. 移动所有逻辑客户端。
    4. 鉴于你的按钮点击事件处理程序有多简单,我建议使用第三个选项。所以忘记了btnCheckOut的服务器端事件处理程序。从已经设置为osx ImageButton100的按钮类开始。然后将您的javascript点击处理程序更改为更像:

      $("input.osx, a.osx").click(function (e) {
          e.preventDefault();     
      
          var lineCount = $("#txtApprovalNotes").val()
                              .match(/[^\n]*\n[^\n]*/gi).length;
      
          if (lineCount > 20) {
              alert("Approval notes has a limit of 20 lines.";
          } else {
              $("#osx-modal-content").modal({
                  overlayId: 'osx-overlay',
                  containerId: 'osx-container',
                  closeHTML: '<div class="close">
         <a href="#" class="simplemodal-close" style="font-size:150%;">x</a></div>',
                  minHeight:80,
                  opacity:65, 
                  position:['0',],
                  overlayClose:true,
                  onOpen:OSX.open,
                  onClose:OSX.close,
                  appendTo:'form'
              });
          }
      });
      

      这不仅可以简化逻辑流程,而且还可以减少回调,并在浏览器中提高响应速度。