虽然很多问题和答案告诉我 setTimeout(0)
的用途和用途,但我找不到一个很好的替代方案。
我的问题
我有一个点击处理程序,它执行一个函数,通知另一个类更新其状态。
该点击处理程序位于父元素上。
我在该元素内有一个复选框,可以选中或取消选中该复选框。
因为单击处理程序位于父元素上,所以首先调用它。但我需要我的复选框在发送信号之前更改状态。
因此,我使用 setTimeout(0)
来防止在选中复选框之前发送信号。
HTML
<div click.delegate="update()">
<div class="checkbox">
<label>
<input checked.bind="group.validated" type="checkbox"> Visibility
</label>
</div>
</div>
Javascript
update(){
setTimeout(()=>{
this.signaler.signal('refresh-groups');
}, 0);
return true;
}
基本上,发生的事情是 return true;
在 this.signaler.signal
函数之前执行。这样,在发送信号之前会检查该复选框。 请注意,这在首先更新复选框状态的常规 onclick
方法中不会发生,但这是 Aurelia
框架的行为方式。
我不喜欢我在这里创造的感觉。超时 0 秒意味着该函数位于调用堆栈的末尾,仅此而已。如果我的 return true;
语句发生任何事情导致它等待 0.1 秒,我也会面临同样的问题。
有没有更值得信赖的替代方案?仅仅使用 Promise
似乎并不能解决问题。
最佳答案
我认为主要问题是您使用的 click
事件在输入元素的值更改之前触发。请改用 change
事件。
关于javascript - 我可以信任 setTimeout(fn, 0),还是应该使用替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38853915/