2013-07-23 4 views
68

Czy istnieje sposób użycia javascript i JQuery do dodania dodatkowych pól do wysłania z formularza HTTP przy użyciu testu POST?Jak dodać dodatkowe pola do formularza przed przesłaniem?

Znaczy:

<form action="somewhere" method="POST" id="form"> 
    <input type="submit" name="submit" value="Send" /> 
</form> 

<script type="text/javascript"> 

    $("#form").submit(function(eventObj) 
     { 
      // I want to add a field "field" with value "value" here 
      // to the POST data 

      return true; 
     } 
</script> 
+2

możliwy duplikat [jQuery - dodaj dodatkowe parametry podczas wysyłania (NIE ajax)] (http://stackoverflow.com/questions/2530635/jquery-add-additional-parameters-on-submit-not-ajax) – Marijn

Odpowiedz

99

Yes.You może spróbować z jakimiś ukrytymi params.

$("#form").submit(function(eventObj) { 
     $('<input />').attr('type', 'hidden') 
      .attr('name', "something") 
      .attr('value', "something") 
      .appendTo('#form'); 
     return true; 
    }); 
+18

'. appendTo (this) 'byłoby prawdopodobnie lepsze. – jcuenod

+1

@jcuenod oryginalny 'appendTo ('# form')' jest znacznie lepszy, ponieważ takie podejście pozwala przesłać inny formularz z wartościami z tego. – Andremoniy

+3

Musisz dodać dodatkową logikę, aby uniknąć gromadzenia danych wejściowych przy każdym przesłaniu. – amos

30

Spróbuj tego:

$('#form').submit(function(eventObj) { 
    $(this).append('<input type="hidden" name="field_name" value="value" /> '); 
    return true; 
}); 
+0

Chcę dodać pole pliku dynamicznie. Próbowałem mieć type = file, a wartość również jako plik (używam WebKitDirectory, więc faktycznie otrzymuję obiekty plików), jednak nigdy go nie przekazuję. Tekst wejściowy zawsze jednak przechodzi. Proszę pomóż mi! –

+0

Moja preferowana odpowiedź z powodu użycia 'this' zamiast redundantnego' # form' – rinogo

8

Możesz dodać hiddeninput z cokolwiek wartość trzeba wysłać:

$('#form').submit(function(eventObj) { 
    $(this).append('<input type="hidden" name="someName" value="someValue">'); 
    return true; 
}); 
6
$('#form').append('<input type="text" value="'+yourValue+'" />'); 
-1

to działa:

var form = $(this).closest('form'); 

form = form.serializeArray(); 

form = form.concat([ 
    {name: "customer_id", value: window.username}, 
    {name: "post_action", value: "Update Information"} 
]); 

$.post('/change-user-details', form, function(d) { 
    if (d.error) { 
     alert("There was a problem updating your user details") 
    } 
}); 
+0

Tak, ale nie ma strony przekierowania do wyniku. – omikron

+1

powinno to działać: '$ ('body') .endend (formularz); $ (form) .submit(); ' –