我的代码在运行时工作正常,如果人员只在按钮上单击一次,但是如果他们在按钮上快速点击多个时间,该代码会运行很多次并创建怪异的问题。任何人都知道如何防止这种情况发生?防止代码在运行中多次运行
1
A
回答
0
添加到您的按钮。
onclick="this.disabled=true;"
例子:
<button onclick="this.disabled=true;">Click</button>
当您单击该按钮,立即的onclick运行和禁用按钮,以防止更多的点击。
2
您想要设置<button>
/<a>
的disabled
属性,以防止用户在处理第一个操作时再次触发它。为此,我通常使用一个标志来确定当前是否正在处理该操作。如果该标志已设置,请设置disabled
属性。在你的行动中也有一个警戒声明也是一个好主意。由于某些浏览器可能不尊重disabled
属性。
控制器/分量:
import Ember from 'ember';
import moment from 'moment';
export default Ember.Controller.extend({
isLoading: false,
actions: {
yourAction() {
// It's a good idea to use a guard statement here as well. Just incase the browser doesn't respect the `disabled` attribute.
if(this.get('isLoading')) {
return;
}
this.set('isLoading', true);
// Do your work here. If it's a promise, use `finally` to unset the flag to avoid forever loading on errors.
this.set('isLoading', false);
}
}
}
模板:
<button {{action 'yourAction'}}
disabled={{isLoading}}>
Your Action
</button>
使用这种方法,你也可以在你的行动增加一些装载造型为好。也许微调伪元素:
模板:
<button class="{{if isLoading 'loading'}}"
{{action 'yourAction'}}
disabled={{isLoading}}>
Your Action
</button>
编辑
作为ykaragol mentioned,如果你想/可以将库添加到您的灰烬应用程序,ember-concurrency
将大大简化本地灰烬例子以上。他们有一个指导here,它使用ember-concurrency
将上面的示例重构为更易读的示例。
1
第一种解决方案是通过设置按钮的disabled
属性单击后禁用按钮。
虽然设置disabled
属性的按钮可以完全解决问题;传播重新启用逻辑代码不好,当一些异步操作正在执行。
此外,当您有其他一些条件禁用按钮时,重新启用按钮可能会更复杂。 (例如,如果表单上的某个字段的值不正确,您可能需要再次禁用该按钮。)
对于这种需求,我们更倾向于使用ember-concurrency
插件。它的task
结构为大多数情况提供了更易读的代码。
相关问题
- 1. 代码运行多次
- 2. 代码在IE/Opera中多次运行
- 3. 防止AsyncTask在绑定中多次运行查看
- 4. 循环代码多次运行宏
- 5. 防止setInterval函数运行两次
- 6. 防止`performSelectorInBackground:`从两次运行?
- 7. 代码运行两次
- 8. C代码停止运行
- 9. 在Uwp中只运行一次代码
- 10. jQuery - 防止相同的点击功能一次运行多次
- 11. 如何防止Webpack从Makefile食谱中运行多次
- 12. 在jQuery中,如何防止多次点击执行我的代码多次?
- 13. 代码在循环的第二次运行中停止
- 14. RxSwift代码第一次运行,第二次运行
- 15. 如何防止代码在显示错误时运行?
- 16. 退出的try/catch防止代码从正在运行
- 17. 如何防止Visual Studio代码分析在dll上运行?
- 18. 如何防止代码在特定页面上运行?
- 19. Python - 运行代码结束(迭代?)只能运行一次
- 20. 在黄瓜运行测试前运行一次代码
- 21. 防止多次执行
- 22. 在初次运行时绕过代码
- 23. 在异步方法中使用await来防止下一行代码运行
- 24. 代码在错误后停止运行
- 25. 防止过程运行
- 26. 如何防止Installer.Commit()运行?
- 27. 防止Googlebot运行功能
- 28. 防止运行JavaScript ayschronous
- 29. 防止其他被运行
- 30. 如何防止石英作业多次运行
我试着用ember-concurrency,它似乎没有解决这个问题。基本上我有一个基于计数器的逻辑,当你点击一个按钮时,它将计数器增加1,如果你点击的速度很快,结束它的增量2和它的逻辑混乱,会发生什么。所以我试图锁定这些变量我想,没有妈妈多少次你点击它会增加1倍 – jpoiri
然后'禁用'帮助你?如果你提供旋转,我可以看得更远。 – ykaragol
不,我是我的第一个解决方案,我仍然能够重现它 – jpoiri