Jquery, aby zmienić akcję formularza

118

Mam dwa przyciski w formularzu i dwie różne strony muszą zostać wywołane po ich kliknięciu. po kliknięciu przycisku 1 należy załadować stronę 1, a po kliknięciu przycisku 2 należy wczytać stronę 2. Wiem, jak to zrobić w javascript, ale nie mam pojęcia, jak to zrobić w jquery. Czy ktoś może mi pomóc?

nikhil
źródło

Odpowiedzi:

181

Spróbuj tego:

$('#button1').click(function(){
   $('#formId').attr('action', 'page1');
});


$('#button2').click(function(){
   $('#formId').attr('action', 'page2');
});
EmCo
źródło
28

jQuery to tylko JavaScript, nie myśl o tym inaczej! Podobnie jak w „normalnym” JS, dodajesz detektor zdarzeń do przycisków i zmieniasz atrybut akcji formularza. W jQuery wygląda to mniej więcej tak:

$('#button1').click(function(){
   $('#your_form').attr('action', 'http://uri-for-button1.com');
});

Ten kod jest taki sam dla drugiego przycisku, wystarczy zmienić identyfikator swojego przycisku i identyfikator URI, do którego należy przesłać formularz.

Edwin V.
źródło
20

Użyj jQuery.attr()w swoim module obsługi kliknięć:

$("#myform").attr('action', 'page1.php');
Jesse Bunch
źródło
14

Ze względu na różnorodność:

var actions = {input1: "action1.php", input2: "action2.php"};
$("#input1, #input2").click(function() {
    $(this).closest("form").attr("action", actions[this.id]);
});
karim79
źródło
14

Zobacz tę odpowiedź: https://stackoverflow.com/a/3863869/2096619

Cytując Tamlyn :

jQuery (1.4.2) jest zdezorientowany, jeśli masz jakieś elementy formularza o nazwie „akcja”. Możesz obejść ten problem, używając metod atrybutów DOM lub po prostu unikając nazw elementów formularza „action”.

<form action="foo">
  <button name="action" value="bar">Go</button>
</form>

<script type="text/javascript">
  $('form').attr('action', 'baz'); //this fails silently
  $('form').get(0).setAttribute('action', 'baz'); //this works
</script>
Fernando Vieira
źródło
8
$('#button1').click(function(){
$('#myform').prop('action', 'page1.php');
});
João Mello
źródło
0

Aby dynamicznie zmieniać wartość akcji formularza, możesz wypróbować poniższy kod:

Poniższy kod jest jeśli otwierasz jakiś dziennik, a wewnątrz niego masz formularz i chcesz zmienić jego działanie. Użyłem okna dziennego Bootstrap i po otwarciu tego okna dziennego przypisuję wartość akcji do formularza.

$('#your-dailog-id').on('show.bs.modal', function (event) {
    var link = $(event.relatedTarget);// Link that triggered the modal
    var cURL= link.data('url');// Extract info from data-* attributes
    $("#delUserform").attr("action", cURL);
});

Jeśli próbujesz zmienić akcję formularza na zwykłej stronie, użyj poniższego kodu

$("#yourElementId").change(function() { 
  var action = <generate_action>;
  $("#formId").attr("action", action);
});
Gampesh
źródło