2012-05-11 129 views
0

這裏是我的功能:動態內容加載)射擊兩次

$(".link").click(function(event){ 
    event.preventDefault(); 
    event.stopPropagation(); 
    pageLoad = $(this).data('page'); 
    $('div#loading').fadeIn(); 
    $('div#content').load('pages/'+pageLoad); 
}); 

我有我的網頁,其中顯示了名爲網頁上的標識內容的DIV,但它似乎加載網頁的兩倍。我知道這是因爲其中一個頁面以混洗順序顯示某些東西,我可以看到它加載了兩次。

// LINK CLICK 
$(".link").click(function(event){ 
    event.preventDefault(); 
    event.stopPropagation(); 
    pageLoad = $(this).data('page'); 
    $('div#loading').fadeIn(); 
    $('div#content').load('pages/'+pageLoad); 
    throw new Error('bla bla'); 
}); 

但什麼都始終會導致它開火兩次: 有趣的是,當我添加

throw new Error('something here'); 

到函數的結束,像這樣它工作正常。我嘗試重新安排事情等等,但它仍然存在。我使用這個功能的鏈接很簡單:

<a href="#" class="link" data-page="whatever.php">link</a> 

只有一個jQuery 1.7.2實例被調用。我無能爲力。我也嘗試過live()和on()函數,並且經歷了完全相同的結果。

!!!編輯!

$(".link").click(function(event){ 
    event.preventDefault(); 
    event.stopPropagation(); 
    pageLoad = $(this).data('page'); 
    console.log('clicked'); 
    $('div#loading').fadeIn(function() { 
     console.log('faded'); 
     $('div#content').load('pages/'+pageLoad+'.php', function() { 
      console.log('loaded'); 
     }); 
    }); 
}); 

現在...這裏是真正有趣的地方。我沒有改變我的鏈接之一,從

data-page="page.php" 

只是

data-page="page" 

(因爲.php爲現在直接包含在功能)

當我點擊任何鏈接應該按預期工作,我會加載,點擊,然後淡入我的錯誤控制檯。每個只有一個。該頁面加載兩次。但是,當我點擊不應該工作的鏈接(因爲它包含.php)時,它仍然可用!我得到了我的錯誤控制檯中的三個字和一個錯誤,像這樣:

layout.js:25 clicked 
layout.js:27 faded 
jquery.min.js:4 GET pages/login1.php.php 404 (Not Found) 
layout.js:29 loaded 

,但是網頁仍然會加載內容DIV的每一次點擊它,它只有一次加載像它應該...

所以從我在這裏建立,有出現一些奇怪的現象,這裏的jQuery獲取page.php文件和page.php.php當我點擊鏈接

<a href="#" class="link" page="login1.php"> 

顯示證明當我嘗試並取回頁面甚至不在我的服務器上使用以下鏈接:

<a href="#" class="link" data-page="no">no</a> 

,我在哪裏帶有2個錯誤:

jquery.min.js:4 GET pages/no 404 (Not Found) 
jquery.min.js:4 GET pages/no.php 404 (Not Found) 

這怎麼可能?爲什麼jquery會這樣做?任何人都可以嘗試解釋這裏發生了什麼?

+0

想想我的頭在這裏...嘗試在最後添加返回false而不是拋出錯誤。 –

+0

返回false;沒有幫助它。爲了記錄,我使用Seamonkey(mozilla平臺),但在Chrome中體驗相同的結果。 – user987048

+0

不知道它會幫助任何,但如果你在'href =「javascript:void(0)」' – SpYk3HH

回答

0

找出發生這種情況的原因的最好方法是(看起來好像你試圖盡全力防止事件冒泡)是在點擊處理程序中設置一個斷點並檢查到那一點的棧跟蹤。

如果它運行兩次,第二次運行,你應該明白爲什麼它又被解僱了。

通過拋出一個異常我想你會跳出一些jQuery循環。

+0

爲了進一步增加錯誤檢查的理論,你可以在你的'.load'上運行一個回調函數,並且每次運行一個控制檯記錄它的加載時間 – SpYk3HH