onclick输入类型图像导致表单提交

时间:2012-10-30 09:48:25

标签: html input onclick submit

方案

我有这样的表格:

<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.submitinput type="image"是否会以任何形式触发提交?

2 个答案:

答案 0 :(得分:3)

事实

提交输入上的onclick事件应始终触发表单提交。 除非 onclick事件处理程序显式返回FALSE

在此之后,我的代码中缺少两个重要的细节。

解决方案

  1. onclick事件处理程序中的return关键字。

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

  2. return函数中的checkShippingInfo值。

  3. function checkShippingInfo(form)
    {
          /* do the validation control... */
    
          /* do the ajax call... */
    
          /* I prevent the form submit */
          return false;
    }
    

答案 1 :(得分: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;
                }
            }
        });
  }