如果初始事件返回false,则停止执行事件侦听器

时间:2013-11-01 12:14:25

标签: javascript jquery

如果初始事件返回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");
};

但它始终警告“测试”。

2 个答案:

答案 0 :(得分:1)

<强> DEMO

<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

<强> DEMO

function validate() {  
  var test = true;

  if(test){
    alert('VALID!!!');
  }else{
    alert('invalid...');
    return false;
  }
}

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