Javascript для обнаружения текста, а затем нажмите кнопку закрытия всплывающего окна

У меня есть встроенная форма во всплывающем окне.

Когда появляется всплывающее окно и после этого при заполнении формы, приходит сообщение об успешном выполнении "Спасибо что подписались".

То, что я пытаюсь достичь, - это обнаружение сообщения, кнопка закрытия всплывающего окна с идентификатором #buttonidclose должна автоматически нажиматься через js.

Вот HTML:

<div id = "popmake-9255" class = "pum-container popmake theme-3633 pum-responsive pum-responsive-medium responsive size-medium active custom-position" style = "min-width: 0%; max-width: 100%; top: 175px; left: 683.688px; opacity: 1;">
   <div class = "pum-content popmake-content">
      <p>
         <!-- Begin Mailchimp Signup Form -->
      </p>
      <div id = "mc_embed_signup">
         <form action = "https://lbs.us15.list-manage.com/subscribe/post?u=ab37ecab7ff05893ae4a5b4fa&amp;id=d918d8cb05" method = "post" id = "mc-embedded-subscribe-form" name = "mc-embedded-subscribe-form" class = "validate" target = "_blank" novalidate = "novalidate">
            <input type = "hidden" name = "pum_form_popup_id" value = "9255">
            <div id = "mc_embed_signup_scroll">
               <h2>Subscribe to download our brochure</h2>
               <div class = "indicates-required"><span class = "asterisk">*</span> indicates required</div>
               <div class = "mc-field-group">
                  <label for = "mce-EMAIL">Email Address  <span class = "asterisk">*</span><br>
                  </label><br>
                  <input type = "email" value = "" name = "EMAIL" class = "required email" id = "mce-EMAIL" aria-required = "true">
               </div>
               <div class = "mc-field-group">
                  <label for = "mce-FNAME">First Name  <span class = "asterisk">*</span><br>
                  </label><br>
                  <input type = "text" value = "" name = "FNAME" class = "required" id = "mce-FNAME" aria-required = "true">
               </div>
               <div class = "mc-field-group">
                  <label for = "mce-LNAME">Last Name </label><br>
                  <input type = "text" value = "" name = "LNAME" class = "" id = "mce-LNAME">
               </div>
               <div class = "mc-field-group size1of2">
                  <label for = "mce-PHONE">Phone Number  <span class = "asterisk">*</span><br>
                  </label><br>
                  <input type = "text" name = "PHONE" class = "required" value = "" id = "mce-PHONE" aria-required = "true">
               </div>
               <div id = "mce-responses" class = "clear">
                  <div class = "response" id = "mce-error-response" style = "display:none"></div>
                  <div class = "response" id = "mce-success-response" style = "display:none"></div>
               </div>
               <p>
                  <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
               </p>
               <div style = "position: absolute; left: -5000px;" aria-hidden = "true"><input type = "text" name = "b_ab37ecab7ff05893ae4a5b4fa_d918d8cb05" tabindex = "0" value = ""></div>
               <div class = "clear"><input type = "submit" value = "Subscribe" name = "subscribe" id = "mc-embedded-subscribe" class = "button btn btn-primary"></div>
            </div>
         </form>
      </div>
      <p>
         <script type = "text/javascript" src = "//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js"></script><script type = "text/javascript">(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';fnames[4]='PHONE';ftypes[4]='phone';}(jQuery));var $mcj = jQuery.noConflict(true);</script><br>
         <!--End mc_embed_signup-->
      </p>
   </div>
   <button type = "button" class = "pum-close popmake-close" aria-label = "Close">
   ×            </button>
</div>

Пожалуйста, направь меня.

Проверь это. : api.jquery.com/click должно быть то, что вы ищете

Matt.S 17.12.2018 14:22

@ Matt.S Во-первых, это встроенная форма mailchimp. Как определить сообщение об успехе?

Nimesh 17.12.2018 14:25

не могли бы вы опубликовать код, который вы пробовали до сих пор? А разметка всплывающего окна? Он содержится в <iframe>? Боюсь, это слишком широко, чтобы ответить с имеющейся информацией

Tom M 17.12.2018 14:26

См. Этот ответ: stackoverflow.com/a/906565/9524541

SystemGlitch 17.12.2018 14:26

@TomM Пожалуйста, проверьте, я обновил и добавил код в вопрос

Nimesh 17.12.2018 14:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
813
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Что вы можете сделать, так это сделать переменную с логической переменной, сделав ее ложной по умолчанию и изменить ее значение на истину, когда форма заполнена, а затем запустить функцию

function ClickClose (){
while (variable == true){
//    change class name here
}
}

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

Не могли бы вы помочь мне шаг за шагом с кодом, который я могу проверить. Помощь оценена!

Nimesh 17.12.2018 14:34

var a = false; <div id = "test"> </div> function clickClose () {while (variable == false) {document.getElementById ("test"). classList.add (test1 '); document.getElementById ("MyElement"). classList.remove ('имя класса, который вы хотите удалить'); }} это простой пример ... кое-что даст вам идею

Arush Singh 17.12.2018 14:38

пожалуйста, проверьте событие в javascript stackoverflow.com/a/906565/9524541

Arush Singh 17.12.2018 14:47

Вы не поняли мой вопрос. Сначала я хочу определить, отображается ли текст на странице, и если да, будет применима функция щелчка. Как проверить этот текст?

Nimesh 17.12.2018 16:50

вы хотите определить, является ли div пустым или нет. Для этого вы можете использовать var isEmpty = document.getElementById ('dummyId'). innerHTML === ""; и при использовании jquery var isEmpty = $ ("# dummyId"). html () === "";

Arush Singh 18.12.2018 06:33
Ответ принят как подходящий

Я бы рекомендовал использовать MutationObserver API.

Также посмотрите поддержка браузера для этого API

if ($('.pum-overlay').length > 0) {

    // the mutationobserver api needs a DOM node, not a jquery object. 
    // You can access the node by appending [0] to the jquery call.
    var targetNode = $('.pum-overlay')[0];
    var config = { childList: true, subtree: true};


    var callback = function (mutationsList, observer) {
        for (var mutation of mutationsList) {
            if ($('#mce-success-response').text().indexOf('Thank you for subscribing!') >= 0 ) { 
                $('.pum-close').trigger('click');
            }
        }
    };

    var observer = new MutationObserver(callback);
    observer.observe(targetNode, config);
}

код взят из примера Mozilla и изменен

Я попробовал это на своем сервере, но это не сработало. Вот ссылка lbs.edu.ng/executive-education/executive-programmes, нажмите кнопку загрузки брошюры внизу страницы, после этого появится всплывающее окно, и когда появится сообщение об успешном завершении, ничего не произойдет.

Nimesh 17.12.2018 19:16

если вы откроете инструменты разработчика, нажав f12, вы увидите ошибку Uncaught TypeError: Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'.. Это потому, что #pum-container не присутствует в DOM до создания лайтбокса. Измените его на `$ ('. Pum-overlay') [0]`, и он должен работать. Я также обновил код, чтобы проверить, находится ли $('pum-overlay') на странице.

Tom M 17.12.2018 19:21

@ Нимеш ты уверен? Кажется, он работает при заполнении вашей формы

Tom M 18.12.2018 10:06

Да, я нашел решение, небольшое изменение вашего кода. Вот ссылка, jsfiddle.net/rL0qkh5v Пожалуйста, обновите свой ответ, спасибо.

Nimesh 18.12.2018 11:28

Рад, что смог помочь. Я думаю, что ответ хорош как есть, поскольку он не должен представлять решение вашей конкретной проблемы, а скорее быть полезным для людей, посещающих этот сайт в будущем. На мой взгляд, тайм-аут и сопоставление слишком специфичны.

Tom M 18.12.2018 11:31

Ну, на самом деле соответствие текста в моем примере нарушено, поэтому я применю эту часть вашего редактирования

Tom M 18.12.2018 11:38

Что ж, спасибо, я пытался понять весь процесс. Ваше предыдущее было логически правильным, но я не мог понять, почему это не сработало. Вы нашли причину?

Nimesh 19.12.2018 19:10

@Nimesh Да, я использовал $().text вместо $().text(), думая, что это простое свойство, а не метод. Кроме того, вы изменили регистр заглавных букв в строке в своем редактировании, чтобы она отличалась от первоначально опубликованной.

Tom M 19.12.2018 19:26

Другие вопросы по теме