javascript
  • php
  • jquery
  • forms
  • laravel-5.2
  • 2017-01-02 49 views 0 likes 
    0

    我正在使用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')); 
    

    虽然逻辑现在能正常使用,每当我试图做出一些改变并提交表单,服务器端告诉浏览器重定向,但浏览器认为我有未保存的更改,以便它显示我的提示不保存退出或留下。我怎样才能避免它,而不完全禁用提示?

    +0

    为什么不在页面加载时更改隐藏的输入!不要点击提交。我认为这是'Js'问题 –

    +0

    ,因为该表单有多个操作按钮,我需要在表单提交之前决定点击哪个按钮并相应地发送操作。 – Anfal

    +0

    如果你使用ajax怎么办? – Mephiztopheles

    回答

    1

    经过长时间的调试,我的问题得到了解决,并且由于某个全局JS文件对页面上的每个输入按钮都有window.onbeforeunload,导致出错。我发布这个 任何其他谁可能面临这个问题。确保你有如下的点击功能。

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

    对于记录来说,'onbeforeunload'不是,也从来不是浏览器的默认功能。除非您在代码中主动添加处理程序(在这种情况下,这是其他同事的做法),否则您不会首先面对问题。 –

    0

    浏览器显示提示信息,因为您正在使用后处理方法。我认为它在Firefox上提示,但不在谷歌浏览器上。

    解决的办法是改变的帖子得到的方法。当然,如果你发布数据,你不应该那样做。你也可以尝试使用一些JavaScript代码,但是当我遇到非常类似的问题时,它并没有帮助。

    +0

    我不认为使用获取表单而不是帖子是接受发布请求的路线上的一个好主意。 – Anfal

    +0

    这不是事实。您可能正在考虑在浏览浏览器历史记录时获得的“重新发布表单数据”。 –

    +0

    @Anfal如果它必须是一个邮政路线,那么我的解决方案不适合你。有时候人们会错误地选择发布和获取路线,这就是为什么我向你提出解决方案的原因。 –

    相关问题