2013-07-26 35 views
1

這件事情是我的命了兩天
我有這個簡單的代碼:AJAX剛工作第一次頁面加載

<?php if(!isset($_GET['headerload'])){?> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script src="http://royta.ir/js/all.js" type="text/javascript"></script> 
<script src="http://royta.ir/js/main.js'?>"></script> 
<div id="content"> 
<? } ?> 

<a class="item ajax" base="basic" data-title="تنظیمات عمومی" href="http://royta.ir/general/" data-url="/general/" title="تنظیمات عمومی" >asdasd</a> 

與這個jQuery

$(function() { 
$('a.ajax').click(function(eee){ 
    eee.preventDefault(); 
    var location = $(this).attr('href') + '&headerload'; 
    var base = $(this).attr('base'); 
    var id = $(this).attr('data-id'); 
    var titlepage = $(this).attr('data-title'); 
    var url = $(this).attr('data-url'); 
    $('#content').html(''); 
    $('#content').empty(); 
    //change title 


     $.ajax({url:location,success:function(loaddataa){ 
      document.title = titlepage; 
      window.history.pushState(null, titlepage, url); 

      $('#content').html(loaddataa); 
     } 
     }); 

}); 

}) 但當我運行這個頁面http://royta.ir/general,你可以看到
其強制t運行1次與AJAX和一切正常,但如果你再次點擊鏈接頁面將重新加載
任何人都知道爲什麼?

回答

3

您的點擊處理程序是在您的內容添加到頁面之前分配的。您需要使用委託。

$("body").on("click", "a.ajax", function(e) { 
    ... 
}); 

理想情況下,你會以儘量接近a.ajax儘可能家長選擇更換body。但body肯定會奏效。

<div id="foo"> 
    <!-- a.ajax inserted here --> 
</div> 

$("#foo").on("click", "a.ajax", function(e) { 
    ... 
}); 

這裏的jsfiddle http://jsfiddle.net/8jqX9/

http://api.jquery.com/delegate/

+0

在加載main.js文件結束後像魅力! –

5

您會看到...當您運行$('#content').html(loaddataa);時,會在頁面上加載一個新的<a />,因此您綁定到該元素的事件($('a.ajax').click)不再存在。

如果你真的想你的頁面保持工作就像它是一個有效的HTML頁面,然後嘗試用

$('a.ajax').on('click', function(eee){ 

結合在未來創建的元素替換

$('a.ajax').click(function(eee){