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.