2013-10-15 87 views
1

遇到事件代表問題,就無法弄清楚。任何人都可以根據我迄今爲止編寫的代碼指出正確的方向嗎?事件代理問題

通過ajax加載#activity中的所有內容。

<div id="activity"> 
    <table class="activityLog"> 
     <thead> 
      <tr> 
       <th class="action">Activity</th> 
       <th class="datetime">Date</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr> 
       <td>Log in succesful</td> 
       <td>15th October 2013 - 6:29 PM</td> 
      </tr> 
      <tr class="odd"> 
       <td>Logged out successfully</td> 
       <td>14th October 2013 - 10:03 PM</td> 
      </tr> 
     </tbody> 
    </table> 
    <ul id="activityPaganation" class="paganation"> 
     <li><span>1</span></li> 
     <li><a href="#">2</a></li> 
     <li><a href="#">3</a></li> 
     <li><a href="#">4</a></li> 
    </ul> 
</div> 

下面是我正在使用的jQuery。

$(function() { 
// Load Activity 
if($("#activity")) { 
    $("#activity").load("ajax.php?aid=1"); 
} 

$("#activityPaganation").on("click", "li a", function(e) { 
    e.preventDefault(); 
    var pid = $(this).text(); 
    alert('1234567'); 
    /*$.post("ajax.php", {aid:1,page:pid}, function(response) { 
     $("#activity").html(response); 
     alert(pid); 
    });*/ 
}); 
}); 
+1

#activityPagination在您向其委派事件時尚不存在。 .load是異步的。 –

+1

另外,'if($(「#activity」)){'不需要。如果元素不存在,則加載不會發生。 –

回答

2

然後將它委託給activity因爲這是一個似乎並沒有改變。您的ajax調用會再次覆蓋activityPaganation,因此綁定的事件不會持續。

$("#activity").on("click", "li a", function(e) { 
    e.preventDefault(); 
    var pid = $(this).text(); 
    alert('1234567'); 
    /*$.post("ajax.php", {aid:1,page:pid}, function(response) { 
     $("#activity").html(response); 
     alert(pid); 
    });*/ 
}); 

這裏是事件代表團的基本原則,你綁定事件,只要你需要的事件或文件頭(最壞情況)在DOM存在的容器。任何發生在其後代的點擊都會冒泡到父級(綁定事件的地方),然後jquery會查找選擇器匹配(對於您在on語法中篩選的選擇器),並且如果它源自該選擇器,執行處理程序。

另請注意,在您當前註冊的事件中,第一個事件註冊應該不起作用,因爲加載是異步的,您的事件註冊部分在加載完成之前執行。

1

開始於$("#activity")不是布爾值。這是一個jQuery選擇器,所以使用.length()來檢查它的存在。說明:如果長度爲0,那麼假的,其他的一切都是真實的

if($("#activity").length) { 
    $("#activity").load("ajax.php?aid=1"); 
} 

來到你的問題,#activityPagation是動態加載的,所以你不能使用基於關閉該選擇的.on()。您可能需要不通過ajax加載的東西。

$("#activityPaganation").on("click", "li a", function(e) //doesn't work 

$("#activity").on("click", "li a", function(e) //works 

(或)如果#activity是阿賈克斯過更換,尋找任何其他外部容器是靜態的,(或)作爲最後一招,雖然表現不佳

$("document").on("click", "li a", function(e)