0

シナリオ

私はこのフォームを持っています:

<form action="EditShippingInfo.asp" method="POST" id="frmShippingInfo">
  <!-- stuff -->
  <input type="image" id="EditShippingInfo" onclick="javascript:checkShippingInfo(this.form);" src="/img/btn_save.gif" />
</form>

このcheckShippingInfo関数は、いくつかの入力検証コントロールを実行します。最終的には、AJAX を介してサーバー側のコントロールを実行します。

  function checkShippingInfo(form){
        /* runs validation controls */

        var data = setDataForAjax;
        $.ajax({
            type: 'GET',
            url: '/include/checkAddresses.asp',
            data: data,
            async: false,
            success: function (m) {
                if (m == 0) {
                    /* I want to run form.submit only if m=0 */
                    form.submit();
                }
                else {
                    /* otherways I display a message */
                    alert(m);
                    return false;
                }
            }
        });
  }

ただし、 m!=0 の場合でも、フォームの送信はトリガーされます。

質問

form.submit特定の条件下でのみトリガーしたい。いずれにしinput type="image"ても送信をトリガーしますか?

4

2 に答える 2

3

事実

送信入力の onclick イベントは、常にフォーム送信をトリガーします。 onclick イベント ハンドラが明示的に を返さない限りFALSE

この後、私のコードには 2 つの重要な詳細がありません。

ソリューション

  1. returnonclick イベント ハンドラーのキーワード。

    onclick="javascript:return checkShippingInfo(this.form);"

  2. 関数内のreturncheckShippingInfo

.

function checkShippingInfo(form)
{
      /* do the validation control... */

      /* do the ajax call... */

      /* I prevent the form submit */
      return false;
}
于 2012-10-30T11:57:35.837 に答える
0
function checkShippingInfo(form){
        /* runs validation controls */

        var data = setDataForAjax;
        $.ajax({
            type: 'GET',
            url: '/include/checkAddresses.asp',
            data: data,
            async: false,
            success: function (m) {
                if (parseInt(m) == 0) { //use parseInt here to get integer value
                    /* I want to run form.submit only if m=0 */
                    form.submit();
                }
                else {
                    /* otherways I display a message */
                    alert(m);
                    return false;
                }
            }
        });
  }
于 2012-10-30T09:52:02.103 に答える