如何实现多提交按钮对应不同URL的表单?
实现多提交按钮指向不同URL的表单
不需要必须在服务端统一处理,有两种前端实现方案:
方案一:用HTML5原生formaction属性(最简单)
HTML5给提交按钮新增了formaction属性,能直接指定当前按钮对应的提交目标URL,优先级会覆盖表单本身的action设置。
修改后的代码如下:
<form method="post"> {% csrf_token %} {{ form }} <input type="submit" value="Process form with view ONE" formaction="/view-one/"> <input type="submit" value="Process form with view TWO" formaction="/view-two/"> <input type="submit" value="Process form with view THREE" formaction="/view-three/"> </form>
提示:如果你的项目需要兼容IE9及更早版本,这个属性不支持,建议用下面的JS方案。
方案二:JavaScript动态修改表单action
通过监听提交按钮的点击事件,临时修改表单的目标URL后再提交,兼容性覆盖所有浏览器。
代码示例:
<form id="multi-action-form" method="post"> {% csrf_token %} {{ form }} <input type="submit" value="Process form with view ONE" data-action="/view-one/"> <input type="submit" value="Process form with view TWO" data-action="/view-two/"> <input type="submit" value="Process form with view THREE" data-action="/view-three/"> </form> <script> const form = document.getElementById('multi-action-form'); const submitButtons = form.querySelectorAll('input[type="submit"]'); submitButtons.forEach(button => { button.addEventListener('click', function(e) { e.preventDefault(); // 阻止默认提交行为 form.action = this.dataset.action; // 替换表单目标URL form.submit(); // 手动触发表单提交 }); }); </script>
额外注意事项
- 无论用哪种方案,都要保留
{% csrf_token %},避免Django的CSRF验证失败。 - 如果想用
<button>标签代替<input>,两种方案同样适用,比如:<button type="submit" formaction="/view-one/">Process form with view ONE</button>
内容的提问来源于stack exchange,提问作者Tarquinius
相关产品推荐
相关产品推荐

