Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在表单提交jQuery后设置表单操作_Javascript_Php_Jquery_Forms_Form Submit - Fatal编程技术网

Javascript 在表单提交jQuery后设置表单操作

Javascript 在表单提交jQuery后设置表单操作,javascript,php,jquery,forms,form-submit,Javascript,Php,Jquery,Forms,Form Submit,提交表单后,如何“设置”操作(不更改) <form id="serialize" action="newjob.php?serialize=newjob" method="post"> <button id="jobsearch" name="jobsearch">GET FROM DB</button> </form> 是否可以在表单提交后为同一表单设置新表单操作?我需要完成的唯一一件事是,我不能在表单中包含表单(嵌套)从我看到您正在使用jQu

提交表单后,如何“设置”操作(不更改)

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

是否可以在表单提交后为同一表单设置新表单操作?我需要完成的唯一一件事是,我不能在表单中包含表单(嵌套)

从我看到您正在使用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();
}

函数更改函数(){
var newaction='newjob.php?fault=newjob#tabs-2';
$('changingForm').attr('action',newaction);
$('#changingForm).submit();
}
这段代码可能不会像您的案例场景那样工作,但我相信您可以找到它背后的逻辑。jQuery远远落后于我,无法给你一个绝对的答案


希望有帮助。

您无法在
.submit()事件处理程序中修改表单属性,因为它是使用典型的提交方法提交的。
提交发件人后,将加载新的文档,并且尚未捕获表单的任何提交事件集

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


  • AJAX请求,而不是传统的表单提交(推荐)
    您应该在原始页面上处理服务器响应(从PHP发回的数据),就像这样(不修改HTML):


  • 只需检查url是否包含特定字符串,并基于此修改表单的
    操作
    attr(我将其视为一种变通方法,因为现在AJAX在提交表单时更加“用户友好”):


  • 你为什么需要新的行动?听起来这是一个糟糕的问题解决方案。第一种形式是从数据库中获取值,将其粘贴到多个文本框,第二种形式是在创建新id时将值插入数据库。我需要实现这一点,因为我不能在Nest中使用两种形式。我编辑了我的评论,我的错误,这一逻辑似乎相当错误。不知道你所说的“巢中不能有第二种形式”是什么意思。编辑您的原始帖子,以更详细地描述您正试图完成的任务。我的意思是,这是我的理解,即您希望在按下“提交”按钮后,在将其发送到服务器之前更改某些内容。如果没有,您可以使用回调来根据发送第一个表单后返回的数据更改表单。很抱歉,这不是在按“提交”之后,而是在完成“提交”之后,然后在不自动提交的情况下更改表单
    $(function(){
    $('#serialize').submit(function (event)
    {
        var newaction = 'newjob.php?faulty=newjob';
        $(this).attr('action', newaction);
    });
    });
    
    <form id='changingForm' .... >
    <button onclick='changingFunction()' ...>
    </form>
    
    function changingFunction(){
        var newaction = 'newjob.php?faulty=newjob#tabs-2';
        $('#changingForm').attr('action', newaction);
        $('#changingForm).submit();
    }
    
    $('#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 ...
            }
        });
    });
    
    if (window.location.href.indexOf("?serialize=newjob") > -1) {
        $('#serialize').attr('action', 'newjob.php?faulty=newjob');
    }