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 对象要求所有<input>
元素都有名称。
是的,我正在尝试将可排序的内容作为逗号分隔值的字符串推送到 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)的主要内容,如果未能解决你的问题,请参考以下文章
Python CGI 是不是收到由 JQuery 在提交时设置的表单值?
如何使用jquery禁用输入时提交,保留附加的其他功能以完整输入