Подтвердить что ты не робот

Передавать дополнительную переменную при отправке формы с помощью jQuery

У меня есть форма, в которой кнопка Submit не помещается в теги <form>. Кнопка отправки имеет обработчик click для отправки формы через событие jQuery submit(). Это прекрасно работает.

Однако мне нужно, чтобы значение кнопки "Отправить" также было POST'ed. Так как кнопка не существует в тегах <form>, она не включена в массив POST. Поэтому мне нужно спроектировать способ передачи дополнительной переменной при отправке формы.

Некоторые положения о том, чего не может быть достигнуто, включают:

  • Кнопка "Отправить" не может перемещаться в тегах <form>.
  • Он не может использовать методы jQuery ajax, post или get.
  • Он не может иметь скрытые поля input или кнопки отправки, скрытые CSS.
  • Форма должна действовать точно так, как если бы в форме была обычная кнопка отправки.

Я предполагал что-то вроде этого, но, очевидно, это не работает.

$('#admin_form').submit({'variable_name', 'true'});

У кого-нибудь есть идеи о том, как я мог бы это достичь?

4b9b3361

Ответ 1

Одна вещь, которую вы могли бы сделать, это использовать атрибут onsubmit, чтобы javascript вставлял поле post в форму со значением кнопки отправки справа, когда она была отправлена. Вам нужно будет сделать это со скрытым полем ввода, но вы добавите только поле ввода сразу после нажатия пользователем кнопки отправки - так что поле ввода там не будет существовать с самого начала (надеюсь, это удовлетворит ваши требования). Так что-то вроде:

 function submitHandler()
 {
     submitVal = $('#submitButton').val();
     $('#myForm').append("<input type='hidden' name='submitValue' value='"+
                         submitVal+"' />");
     return true;
 }

который будет вставляться в дополнительное значение вправо при нажатии кнопки.

Ответ 2

Это, кажется, старый вопрос, но поскольку я просто столкнулся с подобной проблемой и нашел хорошее решение (для меня), я думал, что опубликую его:

 $('#admin_form').trigger('submit', [ { 'variable_name': true } ]);

или

$('#admin_form').trigger('submit', [ 'variable_name', 'true' ]);

в зависимости от того, хотите ли вы передать переменную с именем variable_name со значением true или вы хотите передать две отдельные переменные.

И чтобы быть понятным, это, конечно, автоматически не отправит variable_name с остальными полями формы, но если у вас есть обработчик отправки, как и в jQuery, переменные будут переданы как аргументы, после событие.

Ответ 3

Ответ Джесси - единственный способ сделать это через POST. Вы также можете добавить переменную в значение действия формы, но это будет передавать этот параметр через GET вместо POST. Без скрытого ввода, добавленного в форму до того, как разрешить действие "отправить" браузера по умолчанию, нет способа получить доступ к исходным данным HTTP-запроса до его отправки - это цыпленок перед дилеммой яйца - что вы намереваясь сделать, это изменить данные/заголовки HTTP POST, которые отправляются на следующую страницу, но единственный способ, которым данные существуют до того, как браузер отправит данные на следующую страницу, заключается в том, что входные теги встроены в элемент формы.

Альтернативным решением, с которым вы могли бы пойти, было бы использовать функцию $.post() для отправки любых данных, которые вы хотите по почте во время обработчика onsubmit, а в обработчике успеха - перенаправление на нужную страницу. Я знаю, что это не соответствует приведенным выше правилам, но это еще одно возможное решение проблемы. Тем не менее.

Если вы хотите стать сумасшедшим и следовать всем вашим правилам, вы также можете:

  • "клонировать" скрытую версию формы в DOM
  • ввести в форму
  • вызвать событие click на вложенном представлении в клонированной форме.

Ответ 4

Если вы хотите сделать это прямо из элемента, который был изменен без написания обработчика отправки, это работает:

<script>
$(function() {
  $( ".datePicker" ).datepicker({ 
      dateFormat: 'dd-M-yy',
      onSelect: function (date) {   
        $('#dateChanger').append("<input type='hidden' name='changed_" + $(this).attr("name") + "' value='" + $(this).attr("value") + "' />");    
        $("#dateChanger").submit();
  }
  });
});
</script>

Ответ 5

В jQuery 1.11.1

Мне это удалось:

$(yourForm).on('submit',{'yourExtraData':extraData},function(event){
        alert('your extra data ' + event.data['yourExtraData'] + ' went thru');
});

Также проверьте: https://api.jquery.com/event.data/