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

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

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

【问题讨论】:

标签: jquery parameter-passing form-submit


【解决方案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 属性?根据stackoverflow.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();

【讨论】:

  • 查看 stackoverflow.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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 2014-09-01
    • 1970-01-01
    • 2013-01-27
    • 2018-07-15
    • 2019-06-23
    • 2014-06-20
    • 1970-01-01
    相关资源
    最近更新 更多