2012-12-21 61 views
1

我正在使用jQuery.ajax讀取並將XML文件呈現爲HTML。關於動態生成html元素的onmousedown

下面的代碼生成按鈕的表中的XML每個數據記錄:

$(xml).children('run').each(function() { 
    var runname = $(this).children('name').text(); 

    buttonHtml = '<tr><td class="expbutton" id="runExpButton" onmousedown="myFunc(runname)">Click me</td></tr>'; 

    $('#Runs').append(buttonHtml); 
});​ 

不難看到這裏我要達到什麼目的。但顯然這是行不通的。

我的問題是如何在jQuery中實現這一點?如果我使用.live或.on方法,則無法訪問本地變量,例如「runname」。

[編輯]

使用jQuery.data()嘗試:

$(xml).children('run').each(function() { 
    var runname = $(this).children('name').text(); 

    buttonHtml = '<tr><td class="expbutton" id="runExpButton" onmousedown="myFunc(runname)">Click me</td></tr>'; 
    $('#runExpButton').data('runname', runname); 
    $('#Runs').append(buttonHtml); 
});​ 

$('#runExpButton').live('click',function() { 
    alert($(this).data("runname")); 
}); 

它似乎沒有工作?只有其中一個按鈕具有正確的數據值。

因爲所有的按鈕都有相同的ID,我懷疑.data()不起作用?

回答

2

我相信你正在尋找的是jQuery的.data()

你可以存儲數據的HTML元素,然後拉出被點擊的元素時該數據。

一個例子是

$(xml).children('run').each(function(index) { 
    var runname = $(this).children('name').text(); 
    buttonHtml = '<tr><td class="expbutton" id="runExpButton'+index+'">Click me</td></tr>'; 
    $('#Runs').append(buttonHtml); 
    $('#runExpButton'+index).data('runname', runname); 
});​ 

$(document).on('click', '.expbutton', function(){ 
    alert($(this).data('runname')); 
}); 

我編輯你的代碼的唯一ID添加到您要添加到表中的每個單元格。

+0

.live()中的$(this).data(「runname」)是否正確?你能看看我的嘗試嗎?它不起作用。 – user1792714

+0

將元素附加到表後,您需要調用.data。在將它附加到表之前,它不存在。 –

+0

@ user1792714我編輯了我的代碼,向您展示如何爲每個單元格創建唯一的ID。您不希望具有相同ID的多個元素。 –

0

您可以更改HTML你喜歡的東西

buttonHtml = '<tr><td class="expbutton" id="runExpButton" data-name="' + runname + '">Click me</td></tr>'; 

然後,作爲布萊克正確地指出,使用$(元素)。數據(「名稱」)來獲取價值。 因此,將事件與.live綁定,讀取數據名稱,獲利!