同时取消-子级内部的父级和子级函数

时间:2018-12-07 10:27:34

标签: javascript jquery

这是问题的简化版本。

单击button,我需要调用function abc并停止执行abc and click这两个功能,如果x == 5

当前情况-abc被取消,但click继续执行。

function abc(){
if(x == 5){return;}
console.log('abc');
}

var x = 5;

$('button').on('click', function(){
abc();
console.log('clicked');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button>CLICK</button>

2 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,则只需要返回abc的结果并进行测试:

function abc(){
  if(x == 5){
    return false;
  }
  console.log('abc');
  return true;
}

var x = 5;

$('button').on('click', function(){
    if (abc()){
       console.log('clicked');
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button>CLICK</button>

顺便说一句,您应该avoid defining global variables (x) like this。而是使用闭包定义范围变量。更像是:

var closure = function(){
  function abc(){
     if(x == 5){
        return false;
     }
     console.log('abc');
     return true;
   }

  var x = 5;
  
  return {abc:abc};
}();

$('button').on('click', function(){
    if (closure.abc()){
       console.log('clicked');
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button>CLICK</button>

这称为Revealing module pattern

答案 1 :(得分:1)

作为阻止单击操作执行任何其他不需要的操作的答案(例如,如果您的按钮是表单中的“提交”按钮,则停止提交表单,或者阻止链接实际访问链接的URL ),您想使用事件的preventDefault()方法:

function abc() {
    console.log('abc');
}


$('button').on('click', function(e){
    if(x == 5) {
        e.preventDefault();
        abc();
    }
    console.log('clicked');
});

var x = 5;