jQuery - 在提交时添加附加参数(不是 ajax)

Posted

技术标签:

【中文标题】jQuery - 在提交时添加附加参数(不是 ajax)【英文标题】:jQuery - add additional parameters on submit (NOT ajax) 【发布时间】:2011-02-01 14:30:46 【问题描述】:

使用 jQuery 的“提交” - 有没有办法将附加参数传递给表单?我不想用 Ajax 来做这件事——这是正常的、刷新典型的表单提交。

$('#submit').click(function () 
    $('#event').submit(function () 
        data:  
        form['attendees'] = $('#attendance').sortable('toArray').toString();
    );
);

【问题讨论】:

您使用的是哪种服务器端技术? 查看我的答案 [此处][1],在提交之前附加到序列化表单。 [1]:***.com/questions/17809056/… 看看***.com/questions/603924/… 【参考方案1】:

这个是为我做的:

var input = $("<input>")
               .attr("type", "hidden")
               .attr("name", "mydata").val("bla");
$('#form1').append(input);

是基于达夫的回答,但添加了NAME属性让它显示在表单集合中,并将VALUE更改为VAL 还检查了 FORM 的 ID(在我的例子中是 form1)

使用 Firefox firebug 检查元素是否被插入。

隐藏的元素会在表单集合中返回,只有只读字段会被丢弃。

米歇尔

【讨论】:

如何用二进制唱“你是我的阳光”?太感谢了。这解决了很多事情。 可以稍微提高可读性: var input = $("", type: "hidden", name: "mydata", value: "bla" ); $('#form1').append($(input)); $("").attr("type", "hidden").attr("name", "mydata").val("bla").appendTo('#表格1');是另一种方式 我喜欢以下组合:$("", type: "hidden", name: "mydata", value: "bla" ).appendTo("#form1") ; 数据大小没有限制吗?我使用 JSON.stringify(obj) 和这个方法发送了一些大对象,它似乎被截断了。【参考方案2】:

在您的情况下,只需将另一个隐藏字段动态添加到您的表单就足够了。

var input = $("<input>").attr("type", "hidden").val("Bla");
$('#form').append($(input));

【讨论】:

我需要提交的数据不支持表单。它必须在服务器端被捕获和处理。 你说的“没有能力”是什么意思? 抱歉 - 这根本不起作用。即使只是强制数据,它也不会将其注入表单。 不能放在表单域中。 如果是字符串,可以放在表单域中【参考方案3】:

你甚至可以使用这个。对我来说效果很好

$("#registerform").attr("action", "register.php?btnsubmit=Save") 
$('#registerform').submit();

这将提交 btnsubmit =Save as GET 值到 register.php 表单。

【讨论】:

这似乎是一个更优雅的解决方案。只要记住根据数据类型使用encodeURIComponent()作为参数值即可。 当允许用户多次提交表单时,这个实际上更好。表单不会获得多个具有不同值的隐藏字段。【参考方案4】:

您不需要在点击提交按钮时绑定提交事件,只需绑定提交事件,无论它如何触发,它都会捕获提交事件。

认为您想要的是像通过 ajax 一样提交可排序的文件。尝试做这样的事情:

var form = $('#event').submit(function () 
    $.each($('#attendance').sortable('toArray'),function(i, value)
        $("<input>").attr(
            'type':'hidden',
            'name':'attendace['+i+']'
        ).val(value).appendTo(form);
    );
);

【讨论】:

仍然没有显示在服务器端 formcollection... 是否有什么特别的事情需要我做才能让隐藏字段显示在服务器上?它使用 FormCollection 对象通过 C#/ASP.NET MVC。 更新了我的答案,我想我了解你想要做什么。 您是否在生成的隐藏表单输入中添加name 属性?根据***.com/questions/504681/…,看起来 FormCollection 对象要求所有&lt;input&gt; 元素都有名称。 是的,我正在尝试将可排序的内容作为逗号分隔值的字符串推送到 formcollection 中。我已经尝试了您的更新,但它仍然没有发布。我不确定自己做错了什么...感谢您的帮助。 听起来问题不在客户端,而是在服务器端。【参考方案5】:

您可以编写一个 jQuery 函数,允许您将隐藏字段添加到表单:

// This must be applied to a form (or an object inside a form).
jQuery.fn.addHidden = function (name, value) 
    return this.each(function () 
        var input = $("<input>").attr("type", "hidden").attr("name", name).val(value);
        $(this).append($(input));
    );
;

然后在提交前添加隐藏字段:

var frm = $("#form").addHidden('SaveAndReturn', 'Save and Return')
                    .submit();

【讨论】:

查看 ***.com/questions/2601223/… 了解更高级的 addHidden 版本 我喜欢这个解决方案的简单性。它不能处理很多情况,但它可以很好地处理它所处理的情况。【参考方案6】:

类似的答案,但我只是想让它用于简单/快速的测试。

var input = $("<input>")
               .attr("name", "mydata").val("go Rafa!");

$('#easy_test').append(input);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>



<form id="easy_test">
  
</form>

【讨论】:

以上是关于jQuery - 在提交时添加附加参数(不是 ajax)的主要内容,如果未能解决你的问题,请参考以下文章

在 jquery 验证中传递附加参数

RoR:发送附加数据以使用 Jquery AJAX 提交

Python CGI 是不是收到由 JQuery 在提交时设置的表单值?

如何使用jquery禁用输入时提交,保留附加的其他功能以完整输入

在 Jquery 或 Javascript 中向附加表单添加唯一 ID

怎么为hbuilder添加angularjs,让它有提示的