2012-02-27 38 views
1

得到了一些解決的麻煩,但想問,也許這裏是另一種解決方案。這是一種情況。 got aspx頁面。用一些代碼隱藏功能,從數據庫中獲取數據。調用的函數和通過JQ在表中返回的數據。數據由服務器準備數學html格式。ie 7沒有在動態生成的標記上觸發事件

$.ajax({ 
      type: "POST", 
      url: "somePage.aspx/foo", 
      data: "{ 'Id' : '" + ID + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
       $("#brandTable").html(msg.d); 
      } 

每個返回行正在尋找這樣的(這是):

<tr btcsId='152' id='btcsId_152' onclick='brandClick(9,24,152)'> 
<td class='DataGridItem' style='padding:3px; margin:0;font-weight:bolder;'>something<input type='hidden' id='brandID_btcsId152' value='24' brandName='something'/></td> 
</tr> 

表格標記:

<table class="DataGrid" id="brandTable" style="padding: 0px; margin: 0px; width:100%;border-collapse:collapse;table-layout:fixed;word-wrap:break-word;" border = "0" cellspacing="0" cellpadding="0"> 
    </table> 

所以,問題是,該事件的onclick不只是在IE7解僱。 ie8,ie9正常工作。經過一番思考,我決定在表格填充後立即添加此代碼。換句話說,每一行重新啓動事件。

$("[id^='btcsId_']").each(function() { 
    $(this).click(function() { 
    var thisID = $(this).attr("id"); 
    brandClick(specialityID,$("#"+thisID +" > TD > INPUT").val(),$(this).attr("btcsId")); 
    }); 
}); 

之後,它似乎工作正常。但它是正確的嗎?也許還有其他的方式?

回答

1

韌皮方式將博使用delegate()on()(jQuery的> 1.7)委託給你的表元素這些事件的處理:該作品也被dinamically添加

元素
$("table#idofYourTable").on("click", "[id^='btcsId_']", function() { 
    var thisID = this.id; 
    brandClick(specialityID,$("#"+thisID +" > TD > INPUT").val(),$(this).attr("btcsId")); 

}); 
+0

試過這個解決方案。這與每個人使用我的工作是一樣的。無法檢查效率。但會依靠你的經驗。 – aleha 2012-02-27 11:54:12

+0

@aleha不同之處在於,您只有一個事件處理程序,而不是每個元素都有一個事件處理程序:這是我認爲 – 2012-02-27 12:00:28

+0

在ie8上檢查的正確方法。有雙重事件發生,那不是很好。必須從標記中刪除原生onclick =>修改.cs代碼 – aleha 2012-02-27 12:07:52

1

不,這是不正確的。你不能綁定Click to future元素。

要麼你寫的onclick簽名+執行中的元素 - 或者與直播/(更新)將其綁定

$("[id^='btcsId_']").each(function() { 
    $(this).live(function() { 
    var thisID = $(this).attr("id"); 
    brandClick(specialityID,$("#"+thisID +" > TD > INPUT").val(),$(this).attr("btcsId")); 
    }); 
}); 

請考慮使用On代替現場。

(> 1.7)

+0

他說他的代碼工作,最好的辦法是不要這樣做,但使用委託()或on(),我認爲 – 2012-02-27 11:31:40

+0

@NicolaPeluchetti我不知道他的代碼爲什麼工作......我告訴他請改用Live/On。 – 2012-02-27 11:33:58

+0

忘了補充。使用jquery-1.5.2.min.js – aleha 2012-02-27 11:41:19