我正尝试在执行{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>
答案 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>