Livewire表单点击可提交,需5分钟自动提交,现有代码仅刷新页面求解决
解决Livewire表单自动提交问题
你遇到的问题是因为原生的document.quiz.submit()会绕过Livewire的事件处理逻辑。wire:submit.prevent已经阻止了表单的默认提交行为,Livewire是通过监听表单的提交事件来触发postQuiz方法的,而原生submit()调用不会触发这个监听,所以只会导致页面刷新,不会执行Livewire的提交逻辑。
下面提供两种可行的解决方案:
方案一:模拟提交按钮的点击事件
直接触发提交按钮的点击事件,和用户手动点击按钮的效果完全一致,能正确触发Livewire的提交流程:
<form id="steps" wire:submit.prevent="postQuiz" class="show-section" name="quiz"> <button class="next" type="submit" id="submit-quiz-btn"><span>Submit</span></button> </form> <script> window.onload = function() { // 5分钟后触发提交 window.setTimeout(function() { document.getElementById('submit-quiz-btn').click(); }, 300000); }; </script>
方案二:直接调用Livewire组件方法
利用Livewire的JavaScript API直接调用组件的postQuiz方法,无需依赖按钮元素:
<form id="steps" wire:submit.prevent="postQuiz" class="show-section" name="quiz"> <button class="next" type="submit"><span>Submit</span></button> </form> <script> window.onload = function() { window.setTimeout(function() { // 调用当前Livewire组件的postQuiz方法 @this.call('postQuiz'); }, 300000); }; </script>
如果你的项目使用Livewire 3,也可以用Livewire.find('your-component-id').call('postQuiz')来指定组件调用,不过@this会自动指向当前组件,在大多数场景下更便捷。
内容的提问来源于stack exchange,提问作者Abenslive
相关产品推荐
相关产品推荐

