jQuery - добавить дополнительные параметры при отправке (НЕ ajax)

206

Используя jQuery 'submit' - есть ли способ передать дополнительные параметры в форму? Я НЕ собираюсь делать это с Ajax - это нормальная, типичная для обновления форма отправки.

$('#submit').click(function () {
    $('#event').submit(function () {
        data: { 
        form['attendees'] = $('#attendance').sortable('toArray').toString();
    });
});
Ciel
источник
Какие технологии на стороне сервера вы используете?
Энрике
Смотрите мой ответ [здесь] [1], который добавляется в сериализованную форму перед отправкой. [1]: stackoverflow.com/questions/17809056/…
Джефф Лоури
Взгляните на stackoverflow.com/questions/603924/…
LCJ

Ответы:

371

Этот сделал это для меня:

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

основан на ответе Даффа, но добавил атрибут NAME, чтобы он отображался в коллекции форм, и изменил VALUE на VAL. Также проверил ID ФОРМЫ (в моем случае form1)

использовал Firefox Firebug, чтобы проверить, был ли вставлен элемент.

Скрытые элементы отправляются обратно в коллекцию форм, только поля только для чтения отбрасываются.

Мишель

Мишель
источник
46
Как мне петь «ты мое солнце» в двоичном? Огромное спасибо. Это решает так много вещей.
Сиэль
38
Вы можете немного улучшить читабельность: var input = $ ("<input>", {type: "hidden", name: "mydata", value: "bla"}); $ ( '# form1') Append ($ (вход)).
Константин Калбазов
2
$ ("<input>"). attr ("type", "hidden"). attr ("name", "mydata"). val ("bla"). appendTo ('# form1'); это другой путь
киев
6
Мне понравилась комбинация из: $ ("<input>", {type: "hidden", name: "mydata", value: "bla"}). AppendTo ("# form1");
Габейо
Нет ли ограничения на размер данных? Я послал какой-то большой объект, используя JSON.stringify (obj) и этот метод, и он оказался усеченным.
omikron
26

В вашем случае достаточно просто динамически добавить еще одно скрытое поле в форму.

var input = $("<input>").attr("type", "hidden").val("Bla");
$('#form').append($(input));
Дафф
источник
Данные, которые я должен предоставить, не поддерживают форму. Это должно быть захвачено и обработано на стороне сервера.
Сиэль
Что вы подразумеваете под "не способным к форме"?
Винсент Рамдани
Извините - это не сработало. Даже с только принудительными данными, это не вводит их в форму.
Сиэль
Его нельзя поместить в поле формы.
Сиэль
2
Если это строка, то ее можно поместить в поле формы
PetersenDidIt
19

Вы даже можете использовать это. работал хорошо для меня

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

это отправит btnsubmit = Сохранить как значение GET в форму register.php.

Параг
источник
Это кажется более элегантным решением. Просто не забудьте использовать encodeURIComponent()значение параметра в зависимости от типа данных.
Андрес С.К.
1
Это на самом деле лучше, когда пользователь может отправить форму несколько раз. Форма не получит более одного скрытого поля с разными значениями.
Меллон
11

Вы можете написать функцию 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();
Джонатан
источник
1
См. Stackoverflow.com/questions/2601223/… для более продвинутой версии addHidden
Джонатан
1
Мне нравится простота этого решения. Это не обрабатывает много случаев, но это хорошо обрабатывает случай, которым это делает.
Фил
11

Вам не нужно привязывать событие отправки по нажатию кнопки отправки, просто привязайте событие отправки, и оно будет захватывать событие отправки независимо от того, как оно вызывается.

Подумайте, что вы хотите, чтобы отправить сортируемую как Ajax. Попробуйте сделать что-то вроде этого:

var form = $('#event').submit(function () {
    $.each($('#attendance').sortable('toArray'),function(i, value){
        $("<input>").attr({
            'type':'hidden',
            'name':'attendace['+i+']'
        }).val(value).appendTo(form);
    });
});
PetersenDidIt
источник
все еще не отображается на стороне сервера formcollection ... Есть ли что-то особенное, что я должен сделать, чтобы скрытое поле отображалось на сервере? Он проходит через C # / ASP.NET MVC с использованием объекта FormCollection.
Сиэль
Обновил мой ответ, думаю, я понимаю, что вы пытаетесь сделать.
PetersenDidIt
Вы добавляете nameатрибут к сгенерированному вводу скрытой формы? Согласно stackoverflow.com/questions/504681/… похоже, что объекты FormCollection требуют, чтобы все <input>элементы имели имена.
npdoty
Да, я пытаюсь вставить сортируемую коллекцию в виде строки значений, разделенных запятыми. Я попробовал ваше обновление, но оно до сих пор не опубликовано. Я не уверен, что я делаю неправильно ... Я ценю помощь.
Сиэль
Похоже, проблема не на стороне клиента, а на стороне сервера.
PetersenDidIt
2

Аналогичный ответ, но я просто хотел сделать его доступным для простого / быстрого теста.

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>

Качо Санта
источник