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


206

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

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

Какие технологии на стороне сервера вы используете?
Энрике

Смотрите мой ответ [здесь] [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);
    });
});

все еще не отображается на стороне сервера 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>

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.