Respostas:
Depende se você está enviando o formulário normalmente ou através de uma chamada AJAX. Você pode encontrar muitas informações em jquery.com , incluindo documentação com exemplos. Para enviar um formulário normalmente, consulte o submit()
método nesse site. Para o AJAX , existem muitas possibilidades diferentes, embora você provavelmente deseje usar os métodos ajax()
ou post()
. Observe que post()
é realmente apenas uma maneira conveniente de chamar o ajax()
método com uma interface simplificada e limitada.
Um recurso crítico, que eu uso todos os dias, que você deve marcar como é o jQuery funciona . Possui tutoriais sobre o uso do jQuery e a navegação à esquerda dá acesso a toda a documentação.
Exemplos:
Normal
$('form#myForm').submit();
AJAX
$('input#submitButton').click( function() {
$.post( 'some-url', $('form#myForm').serialize(), function(data) {
// ... do something with response from server
},
'json' // I expect a JSON response
);
});
$('input#submitButton').click( function() {
$.ajax({
url: 'some-url',
type: 'post',
dataType: 'json',
data: $('form#myForm').serialize(),
success: function(data) {
// ... do something with the data...
}
});
});
Observe que os métodos ajax()
e post()
acima são equivalentes. Existem parâmetros adicionais que você pode adicionar à ajax()
solicitação para lidar com erros, etc.
$('form#MyForm').serialize() + '&newData=' + newData + '&moreData=' + moreData
. Nota: os dois últimos podem precisar ser codificados em URL usando encodeURIComponent()
. OU - você pode mudar para usar a codificação JSON nas duas extremidades, mas precisará inserir os dados do formulário em uma estrutura de dados JavaScript com seus dados extras e serializá-los. Nesse caso, você provavelmente usar serializeArray
no formulário e mesclar seus outros dados.
Você terá que usar $("#formId").submit()
.
Você geralmente chamaria isso de dentro de uma função.
Por exemplo:
<input type='button' value='Submit form' onClick='submitDetailsForm()' />
<script language="javascript" type="text/javascript">
function submitDetailsForm() {
$("#formId").submit();
}
</script>
Você pode obter mais informações sobre isso no site Jquery .
quando você tem um formulário existente, que agora deve funcionar com jquery - ajax / post, agora você pode:
faça suas próprias coisas
$(function() {
//hang on event of form with id=myform
$("#myform").submit(function(e) {
//prevent Default functionality
e.preventDefault();
//get the action-url of the form
var actionurl = e.currentTarget.action;
//do your own request an handle the results
$.ajax({
url: actionurl,
type: 'post',
dataType: 'application/json',
data: $("#myform").serialize(),
success: function(data) {
... do something with the data...
}
});
});
});
Observe que, para que a serialize()
função funcione no exemplo acima, todos os elementos do formulário precisam ter seus name
atributos definidos.
Exemplo do formulário:
<form id="myform" method="post" action="http://example.com/do_recieve_request">
<input type="text" size="20" value="default value" name="my_input_field">
..
.
</form>
@PtF - os dados são enviados usando POST nesta amostra, então isso significa que você pode acessar seus dados via
$_POST['dataproperty1']
, em que dataproperty1 é um "nome-da-variável" no seu json.
aqui exemplo de sintaxe, se você usar o CodeIgniter:
$pdata = $this->input->post();
$prop1 = $pdata['prop1'];
$prop1 = $pdata['prop2'];
No jQuery, eu preferiria o seguinte:
$("#form-id").submit()
Mas, novamente, você realmente não precisa do jQuery para executar essa tarefa - basta usar JavaScript regular:
document.getElementById("form-id").submit()
No manual: jQuery Doc
$("form:first").submit();
Para informações,
se alguém usar
$('#formId').submit();
Não faça algo assim
<button name = "submit">
Demorou muitas horas para descobrir que o envio () não funcionaria assim.
"sumit"
digitação na palavra-chave deixa claro se o erro de digitação não é intencional na resposta ou está relacionado ao problema. Você quer dizer que um botão chamado "submit"
bagunça o formulário jquery submit ()? Ou você quer dizer que o problema foi que você deu o nome do botão enviar em vez do padrão type="submit"
?
Use-o para enviar seu formulário usando jquery. Aqui está o link http://api.jquery.com/submit/
<form id="form" method="post" action="#">
<input type="text" id="input">
<input type="button" id="button" value="Submit">
</form>
<script type="text/javascript">
$(document).ready(function () {
$( "#button" ).click(function() {
$( "#form" ).submit();
});
});
</script>
button
ao seu botão para garantir que o formulário não seja enviado (pois nem todos os navegadores tratam botões sem nenhum tipo da mesma maneira).
isto enviará um formulário com o preloader:
var a=$('#yourform').serialize();
$.ajax({
type:'post',
url:'receiver url',
data:a,
beforeSend:function(){
launchpreloader();
},
complete:function(){
stopPreloader();
},
success:function(result){
alert(result);
}
});
Tenho algum truque para fazer com que os dados de um formulário sejam reformados com o método aleatório http://www.jackart4.com/article.html
$("form:first").submit();
Veja eventos / envie .
Observe que, se você já instalou um ouvinte de evento de envio para o seu formulário, a chamada interna para submit ()
jQuery('#<form-id>').submit( function(e){
e.preventDefault();
// maybe some validation in here
if ( <form-is-valid> ) jQuery('#<form-id>').submit();
});
não funcionará, pois tenta instalar um novo ouvinte de evento para o evento de envio deste formulário (que falha). Portanto, você precisa acessar o próprio elemento HTML (desembrulhar do jQquery) e chamar submit () nesse elemento diretamente:
jQuery('#<form-id>').submit( function(e){
e.preventDefault();
// note the [0] array access:
if ( <form-is-valid> ) jQuery('#<form-id>')[0].submit();
});
Você também pode usar o plugin do formulário jquery para enviar usando o ajax também:
Observe que no Internet Explorer há problemas com formulários criados dinamicamente. Um formulário criado como este não será enviado no IE (9):
var form = $('<form method="post" action="/test/Delete/">' +
'<input type="hidden" name="id" value="' + myid + '"></form>');
$(form).submit();
Para fazê-lo funcionar no IE, crie o elemento do formulário e anexe-o antes de enviar da seguinte maneira:
var form = document.createElement("form");
$(form).attr("action", "/test/Delete")
.attr("method", "post");
$(form).html('<input type="hidden" name="id" value="' + myid + '" />');
document.body.appendChild(form);
$(form).submit();
document.body.removeChild(form);
Criar o formulário como no exemplo 1 e depois anexá-lo não funcionará - no IE9, gera um erro JScript DOM Exception: HIERARCHY_REQUEST_ERR (3)
Adereços para Tommy W @ https://stackoverflow.com/a/6694054/694325
Até agora, as soluções exigem que você saiba o ID do formulário.
Use este código para enviar o formulário sem precisar saber o ID:
function handleForm(field) {
$(field).closest("form").submit();
}
Por exemplo, se você deseja manipular o evento click de um botão, pode usar
$("#buttonID").click(function() {
handleForm(this);
});
você poderia usá-lo assim:
$('#formId').submit();
OU
document.formName.submit();
Truque do IE para formulários dinâmicos:
$('#someform').find('input,select,textarea').serialize();
Eu recomendo uma solução genérica para que você não precise adicionar o código para todos os formulários. Use o plugin do formulário jquery (http://jquery.malsup.com/form/) e adicione este código.
$(function(){
$('form.ajax_submit').submit(function() {
$(this).ajaxSubmit();
//validation and other stuff
return false;
});
});
Também usei o seguinte para enviar um formulário (sem realmente enviá-lo) via Ajax:
jQuery.get("process_form.php"+$("#form_id").serialize(), {},
function() {
alert("Okay!");
});
$.post
explicitamente desconstroem e reconstroem o formulário para gerar dados a serem enviados. Obrigado!