dydikson
@dydikson
Выношу свой мозг всякой вполне очевидной фигней

Как в javascript написать функцию которая б отслеживала определенный класс, который меняется при помощи AJAX?

Здравствуйте друзья.
Что имеем:
Сайт на CMS WordPress на котором установлен плагин Formidable PRO - он отвечает за формы которые заполняют пользователи на сайте. В случае не правильного заполнения формы, или же пропуска обязательных полей для заполнения, Formidable через AJAX обновляет поля с ошибками, выделяя их красным цветом и подписывая информирующим о ошибке текстом. После обновления появляется новый класс ".frm_error".
Вот так выглядит один из блоков об ошибке:
<div class="frm_error">Это поле не может быть пустым.</div>

Что нужно:
В случае ошибочного заполнения (или не заполнения), показать popup окно (которое будет показано при помощи плагина Popup Maker) с определенным текстом.
То есть нужно написать скрипт который при появлении на странице элемента (DIV) с классом ".frm_error" отобразил бы popup окно.
Вся проблема в том что:
1) AJAX обновляет только определенный блок страницы;
2) Не хватает моих знаний.

Если прописать простой вариант скрипта (в данном варианте функция для тестирования основной работы скрипта на отображение попап):
function.php:
/*Popup Maker - Open popup window if else*/
wp_enqueue_script(
    'open-popup',
    get_stylesheet_directory_uri() . '/got_top-master/js/jquery-2.2.1.min.js',
    array( 'popup-maker-site' ), // Require PM scripts first.
    null,
    true // Load in footer.
);


jquery-2.2.1.min.js:
$(document).ready(function() {
	if ( $("#dslc-module-496").hasClass("dslc-module-front") ) { /*IF - поиск в идентификаторе класса*/
	jQuery('#popmake-778').popmake('open');}  /*Открытие POPUP окна через Popup Maker плагин*/
	});


То все работает.
Не работает если я пытаюсь как-то указать в функции - если div имеет класс frm_error, то ...

Друзья, тыкните с чего начать и как решить. Спасибо всем ответившим.
  • Вопрос задан
  • 241 просмотр
Решения вопроса 1
там где приходит ответ из ajax success: после добавления результата на страницу сделайте проверку
if ($(".frm_error").length > 0) {
$("#ид_вашего_окна").bPopup(); //// bPopup() удобный плагин отдельно подключается)))
}
дальше можете узнать в каком блоке это случилось ( естественно нужно циклом так как у вас их может быть больше 0) там же через перент взять текст того элемента где была ошибка и добавить в ваш блок попап окна и сделать show вашего окна
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dydikson
@dydikson Автор вопроса
Выношу свой мозг всякой вполне очевидной фигней
Я изменил не много скрипт, теперь он выглядит так:
Function.php:
/*Popup Maker - Open popup window if else*/
wp_enqueue_script(
    'open-popup',
    get_stylesheet_directory_uri() . '../plugins/formidable/js/formidable.min.js',
    array( 'popup-maker-site' ), // Require PM scripts first.
    null,
    true // Load in footer.
);


formidable.min.js - этот вариант не удается запустить (полный код скрипта в конце комента):
function sa(){ia(jQuery(this),"replace")

/*My Function PopUp*/
if ($(".frm_error").length > 0) {
jQuery('#popmake-778').popmake('open'); //// bPopup() удобный плагин отдельно подключается)))
} 
}
/*END My Function PopUp*/


Но если я изменю эту строку AJAX скрипта:
function ha(a,b,c){a.length&&a.is(":visible")&&(a.addClass("frm_blank_field"),"function"==typeof frmThemeOverride_frmPlaceError?frmThemeOverride_frmPlaceError(b,
c):a.append('<div class="frm_error">'+c[b]+"</div>"),jQuery('#popmake-778').popmake('open'));
}

То попандер появляется на доли секунд и исчезает, уверен куда-то не туда прописываю

Ссылка на весь скрипт:
https://github.com/Strategy11/formidable-forms/blo...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы