1つのdivを変更して、ajaxに置き換えています。このdivには、ajaxが成功したときに関数をスクリプトにリロードした場合にのみ機能するスクリプト( fittext )が実行されています。これは機能します。
また、.live()クリックを使用して、新しいコンテンツ内のリンクを機能させています。しかし、div内の.live()リンクを使用して新しいdivをロードしている場合、成功したスクリプトは機能しません。私はそれが一瞬機能しているのを見るだけで、それからそれはもう機能しません。
これが私のAjaxコードです:
$(function(){
var replacePage = function(url) {
$.ajax({
url: url,
type: 'get',
dataType: 'html',
success: function(data){
var dom = $(data);
var html = dom.filter('#content').html();
$("#content").promise().done(function(){
$('#content').html(html);
});
//my script
fitText();
}
});
}
$('nav a').on('click', function(e){
history.pushState(null, null, this.href);
replacePage(this.href);
e.preventDefault();
$("#content").hide();
});
$(window).bind('popstate', function(){
replacePage(location.pathname);
});
});
そして、これが私の.live()コードです:
(function(){
var $lis = $('.list a');
var index = 0, lastIndex = 0;
start();
function next(){
lastIndex = index;
if(++index == $lis.length) index = 0;
$lis.eq(index).addClass('active');
$lis.eq(lastIndex).removeClass('active');
$lis.eq(index).click();
};
function prev(){
lastIndex = index;
if(--index < 0) index = ($lis.length - 1);
$lis.eq(index).addClass('active');
$lis.eq(lastIndex).removeClass('active');
$lis.eq(index).click();
};
function start(){
$lis.eq(0).addClass('active');
$('.next').live("click", next);
$('.prev').live("click", prev);
}
})();
そしてここにhtmlがあります:
// outside ajax content
<div class="list">
<a href="link-1">
<a href="link-2>
</div>
// ajaxed content
<div id="content">
<h2 id="fittext">Heading</h2>
<span class="prev"></span>
<span class="next"></span>
</div>
ここでは.live()を正しく使用しますが、ajaxコンテンツの外側と.live()を使用してajaxコンテンツの内側のリンクをクリックすると同じようになりますが、この場合はなぜ機能しないのでしょうか。