2016-05-26 5 views
0

Почему разница между этими двумя строками кода создает ошибку, которая заставляет jquery бесконечно зацикливаться на iOS (Safari и Chrome)? Цикл не встречался ни в одном другом браузере.jQuery ошибка цикла в iOS

if ($('[name="loadingTime"]') != undefined) {... 

против

if ($('.loadingTime') != undefined) {... 

Когда мы нацелены на класс, а не имя атрибута ошибка петля ушла. Любые идеи или объяснения?

+1

Какова ваша петля? –

+3

Обратите внимание, что '$ ('. LoadingTime')' или '$ ('[name =" loadingTime "]')' никогда не будет 'undefined', jQuery всегда возвращает объект. – Teemu

+1

Способ определить, что селектор jQuery соответствует чему-либо, путем проверки его длины: 'if ($ ('[name =" loadTime "]'). Length! = 0)' – Barmar

ответ

1

После дальнейшего расследования ошибка была обнаружена в другой части кода. Вот что получилось:

loadInterval: function() { 
    var settimer = $('[name="loadingTime]').val(); 
    var interval = setInterval(function() { 
    if (settimer == 0) { 
     window.clearInterval(interval); 
     $('[id^="interstitial-container"]').remove(); 
    }; 
    settimer--; 
    if (settimer >= 0) { 
     $('.ncount').text(settimer); 
    } 
    }, 1000); 
} 

в

var settimer = $('[name="loadingTime]').val(); 

мы пропустили закрывающую кавычку после loadingTime! который js возвращался как undefined, и iOS не обрабатывал его изящно, поэтому var settimer не был установлен на ноль, поэтому всякий раз, когда эта функция loadInterval была вызвана, она была не определена, и мы проверили, нужно ли нам загружать на основе неопределенных или нет , в нашем случае он не был и продолжал загружать снова и снова, всегда получая неопределенный ответ, но без ошибок. Я думаю ...