2015-12-29 3 views
1

У меня есть страница с обратным отсчетом JavaScript и всплывающей подсказкой Bootstrap JavaScript. Они работают очень хорошо, пока я не перезагружу страницу функцией jQuery load();.После функции загрузки JQuery остальная работа JavaScript перестает работать

После того, как я запускаю функцию load(); через пару секунд после загрузки страницы, другой JavaScript перестает работать.

Проверьте мою страницу: http://areafordemos.freeoda.com/reload.html

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

Вот мой код JavaScript:

//JavaScript code for load() after few seconds. 
setTimeout(function(){ 

    $().ready(function() { 
    $(".reloadthis").load("reload.html .reloadthis"); 
    }); 


}, 5000); 

//JavaScript code for tooltip. 
$(document).ready(function(){ 
    $('[data-toggle="tooltip"]').tooltip(); 
}); 

//JavaScript code for countdown 
function getTimeRemaining(endtime) { 
    var t = Date.parse(endtime) - Date.now(); 
    var seconds = Math.floor((t/1000) % 60); 
    var minutes = Math.floor((t/1000/60) % 60); 
    var hours = Math.floor((t/(1000 * 60 * 60)) % 24); 
    var days = Math.floor(t/(1000 * 60 * 60 * 24)); 
    return { 
    'total': t, 
    'days': days, 
    'hours': hours, 
    'minutes': minutes, 
    'seconds': seconds 
    }; 
} 

function initializeClock(id, endtime) { 
    var clock = document.getElementById(id); 
    var daysSpan = clock.querySelector('.days'); 
    var hoursSpan = clock.querySelector('.hours'); 
    var minutesSpan = clock.querySelector('.minutes'); 
    var secondsSpan = clock.querySelector('.seconds'); 

    function updateClock() { 
    var t = getTimeRemaining(endtime); 

    if (t.total <= 0) { 
     document.getElementById("clockdiv").className = "hidden-div"; 
     document.getElementById("timeIsNow").className = "visible-div"; 
     clearInterval(timeinterval); 
     return true; 
    } 

    daysSpan.innerHTML = t.days; 
    hoursSpan.innerHTML = ('0' + t.hours).slice(-2); 
    minutesSpan.innerHTML = ('0' + t.minutes).slice(-2); 
    secondsSpan.innerHTML = ('0' + t.seconds).slice(-2); 

    } 

    updateClock(); 
    var timeinterval = setInterval(updateClock, 1000); 
} 

var deadline = '2016-01-01T12:00:00+02:00'; 
console.log(deadline); 

initializeClock('clockdiv', deadline); 
+0

Возможный дубликат [JQuery Event не запускается после вызова ajax] (http://stackoverflow.com/questions/13767919/jquery-event-wont-fire-after-ajax-call) – JJJ

+0

Будет ли элемент до '.load' быть целевой по умолчанию? Я имею в виду '$ (« # container »). Load (« temp.html #innerContainer »)' здесь 'innerContainer' был бы целевой, но в примере OP оба значения одинаковы. Примечание: Извинения за глупый вопрос. никогда не использовали его, но обязательно просмотрите его позже. – Rajesh

+0

Использование верное. Он заменяет содержимое '.reloadthis' содержимым загруженного документа' .reloadthis'. – JJJ

ответ

2

При привязке события к элементу в JavaScript, обработчик будет жить на самом элемент, а не держать ссылку на это класс так, когда вы перезарядить новое содержимое на странице, JS больше не будет привязано к ним.

Вы можете сделать (по крайней мере) две вещи, чтобы исправить вашу проблему.

Один из них состоял бы в повторном запуске JS путем повторного вызова функций.

например. Всякий раз, когда вы делаете $.load, вы можете добавить обратный вызов, который должен быть запущен после. Это делается при загрузке содержимого страницы.

Например:

$('.reloadthis').load('reload.html .reloadthis', function(resp, status, xhr) { 
    call_functions_again(); // psuedo, you'd want to re-call your functions here to make them work with ajax loaded content 
}); 

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

+0

Я очень ценю вашу помощь. Я хотел бы повторно запустить мои javascript-коды. Но как применять 'call_functions_again();' к ним? Я попытался скопировать/вставить другой код javascript в этот блок, но, вероятно, что я сделал, это смешно. – LetsSeo

+1

@LetsSeo Вам просто нужно вызвать 'initializeClock ('clockdiv', крайний срок);' снова. – JJJ

+0

'call_functions_again()' это имя созданной функции, оно ничего не делает, кроме как давать ошибки, если вы не определили его сами. В вашем случае начните с замены 'call_functions_again()' всеми функциями, которые нужно фактически вызвать, чтобы манипулировать тем, что находится в '.reloadthis' – SidOfc

Смежные вопросы