submit()obsubmitイベントをトリガーできない解決策


formフォームは通常type=「submit」のボタンによってトリガーされ、クリックからフォームの提出まで、次の2つの方法を経験します.
  • onsubmit();
  • submit();

  •  
    一部のページでは、いくつかの理由で標準のボタンを放棄し、type=「button」のボタンで置き換え、submit()を手動でトリガーします.以下のようにします.
    <input type="button" value="  " onclick="document.form.submit();" />

    このとき、onsubmit()のプログラムが実行されないため、問題が発生しました.DHTMLマニュアルでは、両者の関係について何度も言及しています.
    submit Methodは
    The submit method does not invoke the onsubmit event handler. Call the onsubmit event handler directly. When using Microsoft® Internet Explorer 5.5 and later, you can call the fireEvent method with a value of onsubmit in the sEvent parameter.
      
    したがって、解決策は、submit()の前にonsubmitイベントを手動でトリガーし、次の完全なコード(jqueryを参照)を使用します.
    <html>
    <head>
    <script src="jquery-1.3.2.min.js"></script>
    </head>
    <body>
    
    <form id="myform" action='/Personinfo/infoAction' method='post' name='Users_form' > 
      :<input type='text' name="obj_Users[birth]" value='1971-01-01' />
    <input type='button' value='      ' onclick="foo();" />
    </form>
    
    </body>
    </html>
    
    <script language=javascript>
      //  obsubmit  
      $(window).load(function(){
        $("#myform").bind("submit", function() { alert('     onsubmit   !'); return false;})
      });
    
      function foo(){
        var result = false;
        //IE fire event
        form = document.Users_form;
        if (form.fireEvent) {
          result = form.fireEvent('onsubmit');
        //DOM2 fire event
        } else if (document.createEvent) {
          var ev = document.createEvent('HTMLEvents');
          ev.initEvent('submit', false, true);
          result = form.dispatchEvent(ev);
        }
        if(result) {document.Users_form.submit();}
    
      }
    </script>