如何接连执行一个功能

时间:2019-01-10 09:24:24

标签: javascript jquery

我正尝试在执行{strong> b()之后执行a()

即-除第一个标题外,所有标题均应为3-应该为5

为什么在b()内嵌套a()无效?

实际上a()是一个更大的函数,a();b();不起作用

function a(){
$('.title').text('3');
}

function b(){
$('.title').eq(0).text('5');
}

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

<div class='title'>title</div>
<div class='title'>title</div>
<div class='title'>title</div>
<div class='title'>title</div>

<button>CLICK</button>

3 个答案:

答案 0 :(得分:2)

您可以将b作为回调传递给a,然后在a内部调用它。

function a(cb) {
  $('.title').text('3');
  cb()
}

function b() {
  $('.title').eq(0).text('5');
}

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

<div class='title'>title</div>
<div class='title'>title</div>
<div class='title'>title</div>
<div class='title'>title</div>

<button>CLICK</button>

您也可以从a返回承诺,并且then解析后,b调用a函数。这样,如果您在a中进行了异步调用,b将等到a解决之后,您还可以使用a返回的内容。

function a() {
  $('.title').text('3')
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve(5), 1000)
  })
}

function b(n) {
  $('.title').eq(0).text(n);
}

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

<div class='title'>title</div>
<div class='title'>title</div>
<div class='title'>title</div>
<div class='title'>title</div>

<button>CLICK</button>

答案 1 :(得分:1)

如果在函数名称后添加括号,则会立即执行该函数。 使用a(b())时,b()的结果将传递到a()。由于您要传递函数本身,因此只需传递函数名称即可。

$('button').on('click', function(){
  a(b);
});

然后您必须在a()内调用该函数

function a(callback) {
  $('.title').text('3');
  callback();
}

答案 2 :(得分:-1)

$("#but").click(function(){
$('.title').text('3');
$('.title').eq(0).text('5');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='title'>title</div>
<div class='title'>title</div>
<div class='title'>title</div>
<div class='title'>title</div>
<button id="but">CLICK</button>