How to capture submit event using jQuery in an ASP.NET application?

前端 未结 8 2044
既然无缘
既然无缘 2020-12-01 03:11

I\'m trying to handle the submit event of a form element using jQuery.

    $(\"form\").bind(\"submit\", function() {
        alert         


        
相关标签:
8条回答
  • 2020-12-01 03:23

    Yeah, this is annoying. I replace __doPostBack with my own so that I could get submit events to fire.

    Iirc, this is an issue when submitting a form via javascript (which calls to __doPostBack do) in IE (maybe other browsers too).

    My __doPostBack replacement calls $(theForm).submit() after replicating the default behavior (stuffing values in hidden inputs)

    0 讨论(0)
  • 2020-12-01 03:27

    If you are using .NET Framework 3.5 or up, you can use ScriptManager.RegisterOnSubmitStatement() in your server-side code. The registered script will get called both on normal submit and on DoPostback.

    ScriptManager.RegisterOnSubmitStatement(this, this.GetType(), "myKey", "SomeClientSideFunction();");
    
    0 讨论(0)
  • 2020-12-01 03:31

    This works for capturing the submit:

    $("form input[type=submit]").live("click", function(ev) {
        ev.preventDefault();
        console.log("Form submittion triggered");
      });
    
    0 讨论(0)
  • 2020-12-01 03:33

    Thanks, @Ken Browning and @russau for pointing me in the direction of hijacking __doPostBack. I've seen a couple of different approaches to this:

    1. Hard-code my own version of __doPostBack, and put it later on the page so that it overwrites the standard one.
    2. Overload Render on the page and inject my own custom code into the existing __doPostBack.
    3. Take advantage of Javascript's functional nature and create a hook for adding functionality to __doPostBack.

    The first two seem undesirable for a couple of reasons (for example, suppose in the future someone else needs to add their own functionality to __doPostBack) so I've gone with #3.

    This addToPostBack function is a variation of a common pre-jQuery technique I used to use to add functions to window.onload, and it works well:

    addToPostBack = function(func) {
        var old__doPostBack = __doPostBack;
        if (typeof __doPostBack != 'function') {
            __doPostBack = func;
        } else {
            __doPostBack = function(t, a) {
                if (func(t, a)) old__doPostBack(t, a);
            }
        }
    };
    
    $(document).ready(function() {
        alert("Document ready.");
        addToPostBack(function(t,a) {
            return confirm("Really?")
        });
    });
    

    Edit: Changed addToPostBack so that

    1. it can take the same arguments as __doPostBack
    2. the function being added takes place before __doPostBack
    3. the function being added can return false to abort postback
    0 讨论(0)
  • 2020-12-01 03:38

    I don't know how to do it with jQuery, but you could add an OnClientClick property to the ASP.NET control:

    <asp:linkbutton id="TestButton" text="Click me!" runat="server" OnClientClick="alert('Submit detected.');" />
    
    0 讨论(0)
  • 2020-12-01 03:39

    I've had success with a solution with overriding __doPostBack() so as to call an override on form.submit() (i.e. $('form:first').submit(myHandler)), but I think it's over-engineered. As of ASP.NET 2.0, the most simple workaround is to:

    1. Define a javascript function that you want to run when the form is submitted i.e.

      <script type="text/javascript">
      
      function myhandler()
      {
          alert('you submitted!');
      }
      
      </script>
      
    2. Register your handler function within your codebehind i.e.

      protected override void OnLoad(EventArgs e)
      {
          base.OnLoad(e);
          ScriptManager.RegisterOnSubmitStatement(Page, Page.GetType(), 
                                                  "myHandlerKey", "myhandler()");
      }
      

    That's all! myhandler() will be called from straightforward button-input submits and automatic __doPostBack() calls alike.

    0 讨论(0)
提交回复
热议问题