2009-07-29 27 views

Odpowiedz

31

Z instrukcji: jQuery Doc

$("form:first").submit(); 
+2

to ciasto złożyć formularz „id” niż znalezienie pierwszy formularz i przesłać go. jednak będzie to działa idealnie, jeśli jest tylko jedna forma na raz. – ChintanThummar

98

Będziesz musiał użyć $("#formId").submit().

Generalnie wywołasz to z poziomu funkcji.

Na przykład:

<input type='button' value='Submit form' onClick='submitDetailsForm()' /> 

<script language="javascript" type="text/javascript"> 
    function submitDetailsForm() { 
     $("#formId").submit(); 
    } 
</script> 

można uzyskać więcej informacji na ten temat na Jquery website.

+45

Jeśli używasz jQuery, dlaczego chcesz użyć wbudowanego atrybutu onclick? – nnnnnn

+6

"Na przykład:" –

+1

@BradleyFlood - Jak powinien to zrobić zamiast tego? Nowicjusze tacy jak my chcieliby wiedzieć? – MarcoZen

380

To zależy od tego, czy złożenie formularza normalnie lub za pośrednictwem wywołania AJAX. Możesz znaleźć wiele informacji na jquery.com, w tym dokumentacji z przykładami. Aby przesłać formularz w normalny sposób, skorzystaj z metody submit() na tej stronie. W przypadku AJAX istnieje wiele różnych możliwości, chociaż prawdopodobnie warto zastosować metody ajax() lub post(). Zauważ, że post() jest po prostu wygodnym sposobem wywoływania metody ajax() z uproszczonym i ograniczonym interfejsem.

Najważniejszym zasobem, którego używam każdego dnia, jest zakładka: How jQuery Works. Zawiera samouczki dotyczące korzystania z jQuery, a nawigacja po lewej zapewnia dostęp do całej dokumentacji.

Przykłady:

normalnych

$('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... 
       } 
    }); 
}); 

Uwaga że metody ajax() i post() powyżej, są równoważne. Istnieją dodatkowe parametry, które można dodać do wniosku ajax() do obsługi błędów, itp

+3

Brakowało mi metody serializacji. Oczywiście spojrzałem na jQuery.com, ale ich dokumenty na '$ .post' jawnie dekonstruują i rekonstruują formularz w celu wygenerowania danych do przesłania. Dzięki! – nomen

+1

jeśli mam trochę danych gotowych Chcę dodać do żądania postu (nie ajax, formularz Wyślij prośbę o wpis) przed wysłaniem, jak mam to zrobić? –

+1

@AlexanderSupertramp - w powyższym przykładzie dane są wysyłane jako parametry formularza zakodowane w url. Możesz po prostu dołączyć dane jako dodatkowe parametry formularza. '$ ('form # MyForm'). serialize() + '& newData =' + newData + '& moreData =' + moreData'. Uwaga: te dwa ostatnie mogą wymagać zakodowania adresu URL za pomocą 'encodeURIComponent()'. LUB - możesz zmienić kodowanie JSON na obu końcach, ale musisz umieścić dane formularza w strukturze danych JavaScript z dodatkowymi danymi i serializować je. W takim przypadku prawdopodobnie użyjesz 'serializeArray' na formularzu i scalisz swoje pozostałe dane. – tvanfosson

60

w jQuery wolałbym następujące:

$("#form-id").submit() 

ale potem znowu, tak naprawdę nie trzeba wykonywać, że jQuery zadanie - wystarczy użyć regularnych javascript:

document.getElementById("form-id").submit() 
+2

Zgadzam się. Ładowanie jQuery za darmo nie jest praktyczne. Każda technologia ma swoje cele. – erm3nda

+3

z jakiegoś powodu, wersja jquery nie działa, jednak wersja getElementById działa, dziwne. – windmaomao

+1

@windmaomao czy podałeś jQuery na swojej stronie internetowej?Być może jednak musisz użyć jQuery istead of $ aswell - polecam używanie zwykłego rozwiązania JS, chyba że masz już jQuery. – gernberg

-2

mam również stosowane następujące złożyć formularz (bez faktycznego przekazania go) za pośrednictwem Ajax:

jQuery.get("process_form.php"+$("#form_id").serialize(), {}, 
    function() { 
     alert("Okay!"); 
    }); 
+3

to nie jest coś takiego jak submit(). dla jednej rzeczy submit() używa semantyki POST, używasz GET –

1

Polecam ogólne rozwiązanie, więc nie trzeba dodawać kodu do każdego formularza. Użyj wtyczki jquery form (http://jquery.malsup.com/form/) i dodaj ten kod.

$(function(){ 
$('form.ajax_submit').submit(function() { 
    $(this).ajaxSubmit(); 
      //validation and other stuff 
     return false; 
}); 

}); 
2
function form_submit(form_id,filename){ 
    $.post(filename,$("#"+form_id).serialize(), function(data){ 
     alert(data); 
    }); 
} 

będzie zamieszczać dane formularza na podanej nazwy pliku poprzez AJAX.

7
jQuery("a[id=atag]").click(function(){ 

    jQuery('#form-id').submit();  

      **OR** 

    jQuery(this).parents("#form-id").submit(); 
}); 
1

można zrobić to tak:

$('#myform').bind('submit', function(){ ... }); 
7

pamiętać, że w programie Internet Explorer są problemy z dynamicznie tworzonych form. Postać stworzona tak nie złoży w IE (9):

var form = $('<form method="post" action="/test/Delete/">' + 
      '<input type="hidden" name="id" value="' + myid + '"></form>'); 
$(form).submit(); 

Aby dostać pracę w IE tworzyć element formularz i dołączyć go przed złożeniem tak:

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); 

Tworzenie formularza podobnego w przykładzie 1, a następnie dołączenie nie będzie działać - w IE9 zgłasza błąd JScript DOM Exception: HIERARCHY_REQUEST_ERR (3)

podpory Tommy w @https://stackoverflow.com/a/6694054/694325

12

to prześle formularz z preloader:

var a=$('#yourform').serialize(); 
$.ajax({ 
    type:'post', 
    url:'receiver url', 
    data:a, 
    beforeSend:function(){ 
     launchpreloader(); 
    }, 
    complete:function(){ 
     stopPreloader(); 
    }, 
    success:function(result){ 
     alert(result); 
    } 
}); 

i'have jakiś podstęp, aby post formularz danych zreformowany metodą losową http://www.jackart4.com/article.html

+0

czy mógłbyś opublikować zaktualizowany link? Powyższy link już nie działa. – Chris22

4

IE trick dynamicznych formach:

$('#someform').find('input,select,textarea').serialize(); 
7

Rozwiązania do tej pory wymagają znajomości identyfikatora formularza.

użyć tego kodu, aby wysłać formularz bez konieczności znać ID:

function handleForm(field) { 
    $(field).closest("form").submit(); 
} 

Na przykład, jeśli były chcąc obsłużyć zdarzenia kliknij na przycisku, można użyć

$("#buttonID").click(function() { 
    handleForm(this);  
}); 
4

można go używać tak:

$('#formId').submit(); 

LUB

document.formName.submit(); 
46

gdy masz już postać, która powinna teraz pracować z jQuery - ajax/słupek teraz możesz:

  • powiesić na przedstawienia - przypadku formularza
  • zapobiec domyślną funkcjonalność przedstawić
  • robić własne rzeczy

    $(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... 
           } 
         }); 
    
        }); 
    
    }); 
    

Należy pamiętać, że aby funkcja serialize() działała w powyższym przykładzie, wszystkie elementy formularza muszą mieć zdefiniowany atrybut name.

Przykład formularza:

<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 - dane są przesyłane przy użyciu POST w tej próbce, więc to oznacza, że ​​można uzyskać dostęp do swoich danych poprzez

$_POST['dataproperty1'] 

, gdzie dataproperty1 jest "nazwa zmiennej" w twoim jsonie.

tutaj próbka składnia jeśli używasz CodeIgniter:

$pdata = $this->input->post(); 
$prop1 = $pdata['prop1']; 
$prop1 = $pdata['prop2']; 
+0

Dlaczego używasz ponownie selektora formularza, dlaczego nie chcesz ponownie użyć samego elementu formularza? –

+0

tak, możesz to również zrobić:

, ale jeśli js zostanie załadowany później/odjęty, funkcja może nie być dostępna .. więc pomyślałem, że inicjowanie tego na document.ready .... nie jestem pewien, czy jestem na tej samej myśli, czy możesz zilustrować to, co robisz? – womd

+1

Dzięki za zaznaczenie, że atrybut "nazwa" musi być zdefiniowany – ccalboni

6

Użyj go, aby przesłać formularz przy użyciu jQuery. Oto 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> 
+1

Chociaż jest to stary post, warto dodać przycisk "button" do przycisku, aby upewnić się, że formularz nie zostanie przesłany (ponieważ nie wszystkie przeglądarki traktują przyciski bez typów w ten sam sposób). – Mikey

+0

@Mikey Dzięki za sugestię. – ChintanThummar

11

Należy pamiętać, że jeśli już zainstalowany dołączania detektor zdarzeń dla swojej postaci, wywołanie innner przedłożenia()

jQuery('#<form-id>').submit(function(e){ 
    e.preventDefault(); 
    // maybe some validation in here 
    if (<form-is-valid>) jQuery('#<form-id>').submit(); 
}); 

nie praca, ponieważ próbuje aby zainstalować nowy detektor zdarzeń dla zdarzenia przesyłania formularza (które nie powiedzie się). Więc trzeba acces Element HTML sam (unwrap z jQquery) i wywołać submit() na tym elemencie bezpośrednio:

jQuery('#<form-id>').submit(function(e){ 
     e.preventDefault(); 
     // note the [0] array access: 
     if (<form-is-valid>) jQuery('#<form-id>')[0].submit(); 
    }); 
4

Jeśli przycisk znajduje się pomiędzy znacznikami formie, wolę tę wersję:

$('.my-button').click(function (event) { 
    var $target = $(event.target); 
    $target.closest("form").submit(); 
}); 
1

Moje podejście nieco inny Zmień przycisk do przedstawienia przycisk, a następnie kliknij

$("#submit").click(function(event) { 
$(this).attr('type','submit'); 
$(this).click(); 
}); 
+0

Taki przydatny dzięki @NaveenDA –

Powiązane problemy