2013-12-13 45 views
4

所以我想要做的是執行一個警告每次表的第一行的變化。問題是,我每隔10秒就會重新生成一次HTML,因此我無法弄清楚如何「聆聽」更改。如果錶行更改(小提琴裏面)jQuery警報

http://jsfiddle.net/kYZYU/1/

<table id="theTable"> 
<th>Id</th> 
<th>Name</th> 
<th>Score</th> 
    <tr> 
     <td>1</td> 
     <td>James</td> 
     <td>50</td> 
    </tr> 
    <tr> 
     <td>2</td> 
     <td>Peter</td> 
     <td>25</td> 
    </tr> 
    <tr> 
     <td>3</td> 
     <td>Sally</td> 
     <td>10</td> 
    </tr> 
</table> 


$("#theTable").on("change", function() { 
    alert("This person took the lead"); 
}); 


//Goal: An alert every time someone new takes the lead. The problem is, at this point - the table HTML is regenerated every 10 seconds (it will be better solution soon), so it's kind of hard to "listen for changes". 

我在想什麼: 1.在頁面加載,看一下第一個錶行和,下一次的HTML再生保存用戶id的值,運行比較?

+0

'table'沒有更改事件。什麼事件更改表格HTML? – CodingIntrigue

+0

每次更新表時觸發自定義事件,並將該事件綁定到表。 – kayen

+0

好點 - 我不是100%確定我怎麼能夠實際觸發改變。也許存儲#1用戶標識並在HTML重新加載時檢查它? – user2656127

回答

7

您需要自定義事件綁定表第一:

// table listening to an "update" custom event 
$('#leaderboard-spot').on('update', function(){ 
    alert('Table updated, launching kill space goats sequence now.') 
}); 

當你的Ajax請求是成功的,和你的表被更新,火表上的自定義事件:

function loadLeaderboard() { 
    var competitionId = $("body").attr("data-competitionId"); 
    var url = "leaderboard_api.php?competitionId=" + competitionId; 
    $.get(url, function (data) { 
     $("#leaderboard-spot").html(data); 
     // manually triggering an update 
     $("#leaderboard-spot").trigger('update'); 
    }); 
} 
+0

太棒了 - 這正是我想要做的,但不能!我甚至可以只指定表格的第一行,如'#leaderboard-spot table tr:first'或類似的東西? – user2656127

+0

是的,你可以,你只需要觸發指定元素的正確事件。你甚至可以將它綁定到body:'('body')。on('update',dosomething)'然後''('body')。trigger('update')'。 – kayen

+0

好吧,我猜在更新內部,我需要指定userId - 所以它不會在每次重新構建HTML時觸發,只有當新用戶觸及頂部時纔會觸發它。 – user2656127