2

如果初始事件返回 false,我们如何停止执行事件侦听器?

比如说:-

<form id="cForm" name="cForm" method="post" onsubmit="return validate();">
...
</form>

<script type="text/javascript" >
    function validate() {
        return false;            
    }

    $("#cForm").submit(function() {
        // if validate() returns false do not execute this
    });
</script>

我试过这个:

var form = document.getElementById('cForm');
var oldEvent = form.onsubmit;
form.onsubmit = function() {
    return oldEvent && alert("test");
};

但它总是提醒“测试”。

4

2 回答 2

1

演示

<form id="cForm" name="cForm" method="post"></form>

function validate() {
   return false; // try with true      
}

$("#cForm").submit(function( e ) {
  if(!validate){
      e.preventDefault();
      alert('invalid...') ;
  }else{
     alert('VALID!!') ;
  }
});

如果您无法更改内联onsubmit

演示

function validate() {  
  var test = true;

  if(test){
    alert('VALID!!!');
  }else{
    alert('invalid...');
    return false;
  }
}
于 2013-11-01T12:20:49.267 回答
1

你可以这样做:

  • onsubmit从您的第一个属性中删除该属性form,因为您已经将一个jQuery submit事件绑定到它。
  • 接下来在方法中添加验证代码,如下所示submit

JS:

$("#cForm").submit(function () {
    // if validate() returns false do not execute this
    if (!validate()) return false;
});

更新

根据您的要求,您可以这样做:

$("#cForm").submit(function () {
    var status = true;

    try {
        status = this["onsubmit"]();
        if (typeof (status) === "undefined") status = true;
    } catch (e) {
        status = true;
    }

    return status && alert("test");
});  
于 2013-11-01T12:21:22.900 回答