【问题标题】:How to redirect user to new page without getting exiting without changes prompt如何在没有更改提示的情况下将用户重定向到新页面而不退出
【发布时间】:2017-01-02 17:47:20
【问题描述】:

我正在使用 Laravel 5.2 并处理其他人的代码,它有一个表单缺少在服务器端存储表单值所需的字段。我添加了一个新的隐藏输入字段并通过以下代码设置它的值。

<form method="POST">
    <input type="hidden" value="" id="hidden_field" />
    <input type="submit" class='action_button' data-action='save' />
</form>

$('.action_button').on('click', function(event) {
    event.preventDefault();
    $('#hidden_field').val($(this).data('action');
    $('#form').submit();
});

现在表单已提交,数据存储在服务器端,在控制器的末尾有以下代码。

return redirect(url('home'));

虽然逻辑现在可以正常工作,但每当我尝试进行一些更改并提交表单时,服务器端都会告诉浏览器重定向,但浏览器认为我有未保存的更改,因此它会提示我退出而不保存或保留。在不完全禁用提示的情况下如何避免它?

【问题讨论】:

  • 为什么不在页面加载时更改隐藏输入!不是点击提交时。我认为这是一个Js 问题
  • 因为该表单有多个操作按钮,我需要在表单提交之前决定点击了哪个按钮并相应地发送操作。
  • 如果使用 ajax 会怎样?

标签: javascript php jquery forms laravel-5.2


【解决方案1】:

经过一小时的调试后,我的问题得到了解决,并且由于某些全局 JS 文件在页面上的每个输入按钮都有 window.onbeforeunload 引起了错误。我发布这个是为了 其他任何可能面临这个问题的人。确保你有如下点击功能。

$('.action_button').on('click', function(event) {
    event.preventDefault();
    window.onbeforeunload = null;
    $('#hidden_field').val($(this).data('action');
    $('#form').submit();
});

【讨论】:

  • 据记录,onbeforeunload 不是也从来不是浏览器的默认功能。除非您主动在代码中添加处理程序(在这种情况下,是其他同事这样做),否则您一开始不会遇到问题。
【解决方案2】:

浏览器显示提示信息,因为您使用的是post方法。我认为它会在 Firefox 上提示,但不会在 google chrome 上提示。

解决方法是改变post to get方法。当然,如果您要发布数据,则不应该这样做。您也可以尝试使用一些 javascript 代码,但是当我遇到非常类似的问题时,它并没有帮助。

【讨论】:

  • 我不认为在接受发布请求的路线上使用获取表单而不是发布是一个好主意。
  • 这不是真的。您可能正在考虑浏览浏览器历史记录时获得的“重新发布表单数据”。
  • @Anfal 如果必须是邮寄路线,那么我的解决方案对您不利。有时人们会错误地在发布和获取路线之间进行选择,这就是我向您建议解决方案的原因。
猜你喜欢
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 2017-08-06
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
相关资源
最近更新 更多