在表单提交后设置表单动作


Set the Form action after the form has been submit jQuery

如何在表单提交后"设置"动作(不更改)?

<form id="serialize" action="newjob.php?serialize=newjob" method="post">
<button id="jobsearch" name="jobsearch">GET FROM DB</button>
</form>

表单已经提交,并显示值我需要从db,设置表单的新动作,例如提交后我如何得到这样一个,所以我可以添加值到db?

<form id="serialize" action="newjob.php?faulty=newjob" method="post">
<button id="jobsearch" name="jobsearch">ADD TO DB</button>
</form>

据我所知,在网上搜索这个jquery只改变(onsubmit),而不是提交后

$(function(){
$('#serialize').submit(function (event)
{
    var newaction = 'newjob.php?faulty=newjob';
    $(this).attr('action', newaction);
});
});

是否有可能有AFTER表单已提交,然后设置新的表单动作为同一表单?我唯一需要完成的是,因为我不能有一个表单内的表单(嵌套)

您不能在 .submit()事件处理程序中修改表单属性,因为它已经使用典型的提交方法提交。
在from提交之后,将加载新的文档,并且还没有捕获表单的任何提交事件集。

你有两个选择来解决这个问题。


  1. AJAX请求代替传统的表单提交(推荐);
    您应该在原始页面上处理服务器响应(从PHP发回的数据),如下所示(不修改HTML):

    $('#serialize').submit(function (event){
        // prevent typical submit method:
        event.preventDefault();
        var that = $(this), newaction;
        $.ajax({
            url     : that.attr('action'),
            method  : 'GET',
            data    : that.serialize(),
            // dataType : set accordingly to the type of data received from PHP,
            success : function(data_received_from_php){
                if(that.attr('action') === 'newjob.php?faulty=newjob'){
                    newaction = 'newjob.php?serialize=newjob';
                    // do something with "data_received_from_php" for that specific "action" ...
                }else{
                    newaction = 'newjob.php?faulty=newjob';
                    // do something with "data_received_from_php" for that specific "action" ...
                }
                // set the new action attribute:
                that.attr('action', newaction);
            },
            error   : function(){
                // handle errors ...
            }
        });
    });
    

  • 简单地检查url是否包含特定字符串,并基于此修改表单的action attr(我认为这是一个解决方案,因为这些天,AJAX是"用户友好"在提交表单):

    if (window.location.href.indexOf("?serialize=newjob") > -1) {
        $('#serialize').attr('action', 'newjob.php?faulty=newjob');
    }
    
  • 从我看到你正在使用jQuery,我以前做过类似的事情。

    技巧是通过一个普通的按钮来改变你的提交按钮,触发一个函数来做你必须做的事情,最后使用.sumbit()提交表单

    像这样:

    <form id='changingForm' .... >
    <button onclick='changingFunction()' ...>
    </form>
    function changingFunction(){
        var newaction = 'newjob.php?faulty=newjob#tabs-2';
        $('#changingForm').attr('action', newaction);
        $('#changingForm).submit();
    }
    

    这段代码可能不会像你的情况一样工作,但我相信你可以找出它背后的逻辑。jQuery太落后了,我无法给你一个绝对的答案。

    希望能有所帮助。