Я пытаюсь понять, почему моя функция перестала работать после того, как я изменил код html.Как вызвать функцию jquery после изменения html
У меня есть DIV:
<div class="float">
<div class="box" data-speed="3" data-direction="X"><h1>Hola</h1></div>
<div class="box" data-speed="2" data-direction="X"><h1>chau</h1></div>
</div>
И код JQuery:
$(function() {
$('.box').moveIt();
});
//move elements in different speeds
$.fn.moveIt = function() {
var win = $(window);
var it = $(this);
var instances = [];
$(this).each(function(){
instances.push(new moveItItem($(this)));
});
$('.parallax').on('scroll', function() {
instances.forEach(function(inst){
var wrap = inst.el.parents('.float');
var scrol = win.scrollTop()-wrap.offset().top;
inst.update(scrol);
});
});
}
var moveItItem = function(el){
this.el = $(el);
this.speed = parseInt(this.el.attr('data-scroll-speed'));
this.direction = this.el.attr('data-direction');
};
moveItItem.prototype.update = function(scrollTop){
var pos = scrollTop/this.speed;
this.el.css('transform', 'translate'+this.direction+'(' + -pos + 'px)');
};
ОК, пока здесь все не работает, когда я перечисляю элементы .box
перевод соответственно.
Но теперь я пытаюсь изменить HTML в классе .float
после Ajax вызова
//after ajax
$.ajax({
url: 'do_content.php'
}).done(function(result) {
//result = <div class="box" data-speed="3" data-direction="X"><h1>Como estas?</h1></div>
$('.float').html(result);
});
После, когда я выстрелил свитка снова функция появляется смотреть сломаны, и я получил это сообщение:
Uncaught TypeError: Cannot read property 'top' of undefined
at http://localhost/ophelia/public/js/control.js?v=1487219951:197:45
at Array.forEach (native)
at HTMLDivElement.<anonymous> (http://localhost/ophelia/public/js/control.js?v=1487219951:195:13)
at HTMLDivElement.dispatch (http://localhost/ophelia/public/utilities/jquery/jquery-3.1.1.min.js:3:10315)
at HTMLDivElement.q.handle (http://localhost/ophelia/public/utilities/jquery/jquery-3.1.1.min.js:3:8342)
Я понимаю, что это сообщение появляется только в том случае, если я меняю элементы с классом .box
(я попытался изменить только h1
, и он не сломается, но я хочу изменить все, чтобы изменить также скорости)
Как я могу перезапустить функцию?
Я пытался вызвать его снова $('.box').moveIt();
, но все еще получаю ту же ошибку
Я знаю, что это длинный вопрос, но не нашли другой способ, чтобы объяснить мою проблему
Вы можете разместить код для функции AJAX, а также, пожалуйста? – thesublimeobject
отредактировал моего друга –
Когда вы попытались повторно вызвать функцию, вы положили вызов внутри метода 'done()' или вне его сразу после всего метода ajax? – thesublimeobject