Skip to content

Instantly share code, notes, and snippets.

@eriteric
Last active October 13, 2021 16:55
Show Gist options
  • Save eriteric/5d6ca5969a662339c4b3 to your computer and use it in GitHub Desktop.
Save eriteric/5d6ca5969a662339c4b3 to your computer and use it in GitHub Desktop.
Load gravity forms JS in footer
// GF method: http://www.gravityhelp.com/documentation/gravity-forms/extending-gravity-forms/hooks/filters/gform_init_scripts_footer/
add_filter( 'gform_init_scripts_footer', '__return_true' );
// solution to move remaining JS from https://bjornjohansen.no/load-gravity-forms-js-in-footer
add_filter( 'gform_cdata_open', 'wrap_gform_cdata_open' );
function wrap_gform_cdata_open( $content = '' ) {
$content = 'document.addEventListener( "DOMContentLoaded", function() { ';
return $content;
}
add_filter( 'gform_cdata_close', 'wrap_gform_cdata_close' );
function wrap_gform_cdata_close( $content = '' ) {
$content = ' }, false );';
return $content;
}
@JoryHogeveen
Copy link

JoryHogeveen commented May 11, 2016

Hi, Found the same code aswell, here is a improvement on the AJAX calls!
EDITED: 2019-09-05

// Force Gravity Forms to init scripts in the footer and ensure that the DOM is loaded before scripts are executed.
add_filter( 'gform_init_scripts_footer', '__return_true' );
add_filter( 'gform_cdata_open', 'wrap_gform_cdata_open', 1 );
add_filter( 'gform_cdata_close', 'wrap_gform_cdata_close', 99 );

function wrap_gform_cdata_open( $content = '' ) {
	if ( ! do_wrap_gform_cdata() ) {
		return $content;
	}
	$content = 'document.addEventListener( "DOMContentLoaded", function() { ' . $content;
	return $content;
}

function wrap_gform_cdata_close( $content = '' ) {
	if ( ! do_wrap_gform_cdata() ) {
		return $content;
	}
	$content .= ' }, false );';
	return $content;
}

function do_wrap_gform_cdata() {
	if (
		is_admin()
		|| ( defined( 'DOING_AJAX' ) && DOING_AJAX )
		|| isset( $_POST['gform_ajax'] )
		|| isset( $_GET['gf_page'] ) // Admin page (eg. form preview).
		|| doing_action( 'wp_footer' )
		|| did_action( 'wp_footer' )
	) {
		return false;
	}
	return true;
}

@consciousimages
Copy link

This is nuts we have to do this, thank you both!

@Garth619
Copy link

Works great thank you!

@wcandrew
Copy link

Not all hero's wear capes. Thank you! I agree it's nuts that we have to do this tho...

@Nicscott01
Copy link

Nicscott01 commented Nov 16, 2017

Thanks for this...for some reason its not wrapping my inline script (for AJAX mode) in the added JS.

EDIT: I got it to work. Bad copy/paste/edit when using within my class. Thanks for this!!!

@adampatterson
Copy link

@consciousimages This is nuts that we still have to do this. Wasted so much time.

@ericmulder
Copy link

Thanks! Saved the day :)

@MelMacaluso
Copy link

Thanks ❤️

@noriods
Copy link

noriods commented Sep 5, 2019

Thanks @JoryHogeveen! Worked a treat.

@JoryHogeveen
Copy link

@noriods
No problem, I forgot I posted this here. Just updated the code to be even more compatible with other parts of WordPress and AJAX.

@noriods
Copy link

noriods commented Sep 5, 2019

Nice additions, thanks :)

@alexyoungcl
Copy link

thank you for saving me hours of work!

@mikewyattdesign
Copy link

Thank you!

@matpassmore
Copy link

Thank you. Works a treat!

@shireefkhatab
Copy link

Please tell me where to add those snippets?

@shireefkhatab
Copy link

I added those snippets (one at a time; as they are doing same thing) but on both cases when i defer my javascript on my server, the form doesn't load with an error in console says that jquery is not a function.
Can you please help?

@JoryHogeveen
Copy link

@shireefkhatab
My guess is that something in your installation is preventing jQuery from being loaded at all.
In any case, the snipping needs to be placed (as a whole) in your theme functions.php or in a custom plugin. It would also work as a must-use plugin.

@eriteric
Copy link
Author

eriteric commented May 7, 2020

Thanks @JoryHogeveen for your contributions.

@danlapteacru
Copy link

Hey guys, this not works anymore with GF 2.5, also from GF 2.5 scripts are by default in footer.

@jesserosenfield
Copy link

jesserosenfield commented May 11, 2021

This breaks for me when using conditional logic

Uncaught ReferenceError: gf_global is not defined

Error is thrown from this line:

gf_global["number_formats"][5] = {"1":{"price":false,"value":false},"2":{"price":false,"value":false},"3":{"price":false,"value":false},"4":{"price":false,"value":false},"13":{"price":false,"value":false},"12":{"price":false,"value":false},"6":{"price":false,"value":false},"7":{"price":false,"value":false},"8":{"price":false,"value":false},"10":{"price":false,"value":false}};if(window['jQuery']){if(!window['gf_form_conditional_logic'])window['gf_form_conditional_logic'] = new Array();window['gf_form_conditional_logic'][5] = { logic: { 10: {"field":{"actionType":"show","logicType":"all","rules":[{"fieldId":"1","operator":"is","value":"River Club Apartments"}]},

@TeemuSuoranta
Copy link

From GF 2.5 this breaks the forms (that have coniditional logic). See https://community.gravityforms.com/t/gf-2-5-7-5-is-broken/10323/8

I'd advice not using this any more and removing it anywhere where it is added.

@JoryHogeveen
Copy link

Correct, this code is redundant since GF 2.5+

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment