jQuery function BEFORE form submission

JqueryFormsForm Submit

Jquery Problem Overview


I am trying to fire a function using Jquery when the form submit button is clicked, but the function needs to fire BEFORE the form is actually submitted.

I am trying to copy some div tag attributes into hidden text fields upon submission, and then submit the form.

I have managed to get this to work using the mouseover function (when the submit button is hovered over), but this will not work on mobile devices using touch.

$("#create-card-process.design #submit").on("mouseover", function () {
    var textStyleCSS = $("#cover-text").attr('style');
    var textbackgroundCSS = $("#cover-text-wrapper").attr('style');
    $("#cover_text_css").val(textStyleCSS);
    $("#cover_text_background_css").val(textbackgroundCSS);
});

I have played around with the submit function, but the values are not saved within the fields as the function fires when the form is submitted and not before.

Many thanks.

Jquery Solutions


Solution 1 - Jquery

You can use the onsubmit function.

If you return false the form won't get submitted. Read up about it here.

$('#myform').submit(function() {
  // your code here
});

Solution 2 - Jquery

$('#myform').submit(function() {
  // your code here
})

The above is NOT working in Firefox. The form will just simply submit without running your code first. Also, similar issues are mentioned elsewhere... such as this question. The workaround will be

$('#myform').submit(function(event) {

 event.preventDefault(); //this will prevent the default submit

  // your code here (But not asynchronous code such as Ajax because it does not wait for a response and move to the next line.)
  
 $(this).unbind('submit').submit(); // continue the submit unbind preventDefault
})

Solution 3 - Jquery

Based on Wakas Bukhary answer, you could make it async by puting the last line in the response scope.

$('#myform').submit(function(event) {

  event.preventDefault(); //this will prevent the default submit
  var _this = $(this); //store form so it can be accessed later
  
  $.ajax('GET', 'url').then(function(resp) {

    // your code here 

   _this.unbind('submit').submit(); // continue the submit unbind preventDefault
  })  
}

Solution 4 - Jquery

Aghhh... i was missing some code when i first tried the .submit function.....

This works:

$('#create-card-process.design').submit(function() {
    var textStyleCSS = $("#cover-text").attr('style');
    var textbackgroundCSS = $("#cover-text-wrapper").attr('style');
    $("#cover_text_css").val(textStyleCSS);
    $("#cover_text_background_css").val(textbackgroundCSS);
});

Thanks for all the comments.

Solution 5 - Jquery

You can do something like the following these days by referencing the "beforeSubmit" jquery form event. I'm disabling and enabling the submit button to avoid duplicate requests, submitting via ajax, returning a message that's a json array and displaying the information in a pNotify:

jQuery('body').on('beforeSubmit', "#formID", function() {
	$('.submitter').prop('disabled', true);
	var form = $('#formID');
	$.ajax({
		url    : form.attr('action'),
		type   : 'post',
		data   : form.serialize(),
		success: function (response)
		{
			response = jQuery.parseJSON(response);
			new PNotify({
				text: response.message,
				type: response.status,
				styling: 'bootstrap3',
				delay: 2000,
			});
			$('.submitter').prop('disabled', false);
		},
		error  : function ()
		{
			console.log('internal server error');
		}
	});
});

Solution 6 - Jquery

You can use some div or span instead of button and then on click call some function which submits form at he end.

<form id="my_form">
   <span onclick="submit()">submit</span>
</form>

<script>
   function submit()
   {   
       //do something
       $("#my_form").submit();
   }
</script>

Solution 7 - Jquery

I wanted to give a modern Oct, 2021 answer. Currently, $('form').on('submit', function(event) {...}) will never execute before the actual submission in a number of certain cases: FireFox and using HTML5 required on hidden inputs.

I have tested the following solution in Chrome, Firefox, and Brave. Simply set the onClick() of the submit button as your eventhandler. You can cancel the submission by event.preventDefault(); if you don't want the submit to happen. In addition, selecting a text or checkbox input, and hitting enter, still calls the onClick event, even though no-onClick happened, because the browser understands it as a shortcut for clicking your <input type="submit">.

var allowSubmit = false;
document.querySelector('#submit').addEventListener('click', function(event) {
    if(allowSubmit) {
        console.log("Submit allowed.");
        return true;
    }
    
    console.log("Submit prevented.");
    
    event.preventDefault();
    return false;
});

<input type="submit" id="submit" value="Submit Button">

Solution 8 - Jquery

Just because I made this mistake every time when using the submit function.

This is the full code you need:

Add the id "yourid" to the HTML form tag.

<form id="yourid" action='XXX' name='form' method='POST' accept-charset='UTF-8' enctype='multipart/form-data'>

the jQuery code:

$('#yourid').submit(function() {
  // do something
});

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMatt PriceView Question on Stackoverflow
Solution 1 - JquerykartiklukeView Answer on Stackoverflow
Solution 2 - JquerySyed Waqas BukharyView Answer on Stackoverflow
Solution 3 - JquerySoMaView Answer on Stackoverflow
Solution 4 - JqueryMatt PriceView Answer on Stackoverflow
Solution 5 - JqueryFi HoranView Answer on Stackoverflow
Solution 6 - JquerySkriptotajsView Answer on Stackoverflow
Solution 7 - JqueryHoldOffHungerView Answer on Stackoverflow
Solution 8 - Jquerymeck373View Answer on Stackoverflow