Обновление ajaxSubmit

для проектов с jQuery 1.7 и новее

С определенного момента сниппет ajaxSubmit не работает - он формирует нерабочий скрипт. Здесь простой рецепт обновления этого сниппета.

24.06.2018

Корень всех проблем в том, что начиная с jQuery 1.7 функции bind() и live() устарели, а именно на этих функциях завязана работа скрипта, который формируется сниппетом ajaxSubmit. Актуальной заменой этих функций являются on() и off().

Чтобы "отремонтировать" сниппет, нужно внести изменения в файл /assets/plugins/ajax_submit/ajax_submit.inc.php.

Было

.unbind('submit')
.live('submit',function(){

Нужно

.off('submit')
.on('submit',function(){

Было

jQuery(document).bind('ready',{$id}as_setAction);

Нужно

$(document).ready(function(){
	{$id}as_setAction();
});

После строки 55 вставим строчку:

{$id}as_setAction();

Это нужно для того, чтобы форма после замены снова обрабатывалась скриптом.

Ну и еще все слова jQuery в строках 38-65 заменить на знак $.

Дополнительные изменения для отправки события в Яндекс.Метрику

Очень часто требуется отследить, сколько юзеров воспользовались формой и отправили свои данные. Рассмотрим решение этой задачи для Яндекс.Метрики.

Вернемся в файл /assets/plugins/ajax_submit/ajax_submit.inc.php и вставим после строки 54 новую строчку, вот эту:

if(typeof({$id}as_updateCallback)=='function') {$id}as_updateCallback();

Что получим после этой манипуляции? После обновления данных в контейнере будет вызываться функция {$id}as_updateCallback(), если ее определить где-нибудь еще. В этой функции можно проверить какие-нибудь дополнительные условия и отправить в Метрику событие. Вот простой пример. Допустим, у нас вызван сниппет ajaxSubmit с &id=`feedback`. Тогда где-нибудь на странице (разумеется, ниже подключения jQuery) можно объявить функцию feedbackas_updateCallback().

<script>
	function feedbackas_updateCallback(){
		yaCounterXXXXXXXX.reachGoal('event_name');
		return true;
	}
</script>