mehul.prajapati Ответов: 1

Подождите, пока другой поток не будет работать в jquery


Здесь я жду html-элемент кнопки из всплывающего окна iframe. Когда всплывающее окно открыто, то мой блок кода будет запускать событие click вовремя, и оно работает нормально, но мой запрос хочет подождать, пока не получит кнопку.

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

setPrint();


функция setPrint() {
setTimeout(функция () {
var btnprint = null;
var frame = $('#WindowFadeiFrame').get(0).contentDocument;
var btn = $('#btn', кадр);
if (btn.length == 0) {
btnprint == null
консоли.журнала('не найдено');
}
еще {
БТН.нажмите();
btnprintи = БТН;
console.log('найдено сейчас');
}
if (btnprint == null) {
setPrint();
}
}, 100);
}

Что я уже пробовал:

Я сделал занятый компилировать с петлей до тех пор, пока не получу кнопку, но я должен повесить свой сайт.

1 Ответов

Рейтинг:
10

Karthik_Mahalingam

использовать setInterval() [^] метод проверки наличия элемента после того, как элемент найден, очистите объект setInterval с помощью clearInterval() [^] метод. это устранит зацикливание для создания задержки, что является очень плохой идеей


[no name]

@karthik Bangalore, setInterval тоже не ждет, пока не получит кнопку. я хочу этого: сначала вызовите setprint (), а затем еще один код. но должен вызвать другой вызов после получения ответа setprint().

Karthik_Mahalingam

setInterval используется для проверки объекта в периодическом интервале.

[no name]

setPrint();
тревога("привет");

здесь я не хочу вызывать оповещение('привет), пока не получу кнопку и не нажму на нее.
setPrint () - это вложенная функция, поэтому она вызывает саму себя до тех пор, пока не получит кнопку.

Karthik_Mahalingam

Итак, вы хотите вызвать оповещение только тогда, когда кнопка будет найдена в iframe, правильно?

[no name]

setInterval-это отдельный поток. так что я не могу с этим справиться.

Karthik_Mahalingam

пробовать

 function setPrint(callback) {

            var obj = setInterval(function () {

                var frame = $('#WindowFadeiFrame').get(0).contentDocument;
                var btn = $('#btn', frame);
                if (btn.length == 0) {
                    console.log('not found');
                }
                else {
                    btn.click();
                    console.log('found now');
                    clearInterval(obj);
                    callback();
                }
            }, 100);

        }

        setPrint(callback)
        function callback() {
            // write all your code here which need to be executed after finding the control from iframe
            alert('');
        }

[no name]

да, это прекрасно работает. спасибо

Karthik_Mahalingam

Добро пожаловать