Подождите, пока элемент не будет существовать, но запустите код только один раз - PullRequest
0 голосов
/ 03 октября 2019

Так что в настоящее время я использую следующий код для выполнения моего jQuery. Однако, как вы можете видеть, я установил некоторые таймеры для выполнения второй части кода. Я хотел бы посмотреть, существует ли #objectPrice, а затем запустить синхронизированный код, но только один раз. Таким образом, я могу заменить таймеры.

var checkExist = setInterval(function() {
   if (jQuery('#objectPrice').length) {
     var content = jQuery('#prisen').html();
     objectPrice.value = content.replace(/\D/g,'');
   }
}, 200); // check every 200ms

setTimeout(function() { jQuery("#downPayment").focus(); }, 2200);
setTimeout(function() { jQuery("#downPayment").blur(); }, 2205);

1 Ответ

1 голос
/ 06 октября 2019

Правильный способ сделать это Вы можете сделать это, наблюдая за прямым родителем элемента, который вы хотите проверить, давайте предположим, что ваш элемент будет добавлен на страницу в следующем div:

<div id="parent-div">
    <div>child 1</div>
    <div>child 2</div>
</div>

Вам нужно будет наблюдать за любым новым потомком, добавленным в #parent-div, и запускать функцию, когда это происходит:

const callback = function(mutationsList, observer) {
    for(let mutation of mutationsList) {
        if( mutation.addedNodes.length > 0){
            for(let node of mutation.addedNodes) {
                let jqueryNode = jQuery(node);
                if(jqueryNode.is('#objectPrice')){
                    var content = jQuery('#prisen').html();
                    objectPrice.value = content.replace(/\D/g,'');
                }
            }
        }
    }
};
const observer = new MutationObserver(callback);
observer.observe(jQuery('#parent-div')[0], {childList: true});

Но если вы не хотите менятьваш текущий код, вы делаете его рекурсивным и вызываете его в первый раз, как показано ниже:

var checkingFunction = function () {
    if(jQuery('#objectPrice').length){
        var content = jQuery('#prisen').html();
        objectPrice.value = content.replace(/\D/g,'');
    }else{
        setTimeout(function() { checkingFunction() }, 200);
    }
}

checkingFunction();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...