2014-05-07 55 views
-1

我有一個表,它在js中被構造,然後附加到頁面上的div上。 每一行都有一個內嵌事件偵聽器的onclick()設置元素的內聯dblclick()偵聽器

var table = '<table>'; 

for (var i =0; i< 10; i++) { 
    table += '<tr onclick="myfunction()"><td></td></tr>' 
} 

table += '</table>' 

$('#myDiv').html(table); 

如何使用doulbe click事件,而不是單一的點擊在這種結構?

編輯: 在這種情況下,我沒有使用委託,因爲我有很多的參數(每行uniq),這些參數也在每行上內聯構建。 Table每秒刷新約50次,所以一旦用所有參數構造內聯函數,然後在將表追加到DOM之後設置非常重要的監聽器,則更容易。 我已經嘗試了兩種方法,並且在我的案例中內聯工作得更快,並且更清楚地理解onclick應該發生的情況。

+0

你爲什麼不綁定事件中使用的JavaScript相關的/ jQuery的方法的所有雙擊應對?爲什麼不委派這個事件?關於你的問題,爲什麼不使用谷歌? –

+0

'表每秒刷新約50次'這肯定是太多了。無論如何,使用委託會避免許多重複的處理程序,並使您的代碼更加優化。要傳遞具體的數據取決於哪個行被雙擊,你應該設置data- *屬性,並在委託處理程序中使用 –

+0

然後,我將不得不讀取單擊它後的行的數據屬性。這將至少需要6 msc,這太多了。 而且我沒有公開的偵聽器,因爲每次都完全覆蓋表格。 –

回答

1

只需將onclick更改爲ondblclick即可。

但是,使用內聯js是一個壞主意。

既然您正在使用,您可以使用事件委派。

1

由於您的問題標籤中的一個是jQuery的,我會訴諸使用jQuery執行此任務,也不會直接在DOM元素掛鉤的事件處理程序。

$('#generatedTable').on('dblclick', 'tr', function() { 
    alert('tr is clicked'); 
}); 

其中generatedTable是您的表的ID。

使用上將允許所產生的TRS

FIDDLE

+0

OP應該從他的例子中使用:''('#'myDiv')。on('dblclick','tr',myFunction);'http://jsfiddle.net/KSnRw/ Anyway +1,因爲你提供了委託的例子,OP應該使用什麼 –

+0

現在想象每一行都由四列組成,每一列的值都是該函數的一個參數,並且表刷新的次數超過了每秒50次的所有值 構造行內聯我不必讀取參數(或將它們保存在DOM以外的任何地方),我已經將它們內聯。 –

+1

如果您的表每秒刷新50次,那麼您的應用程序的整體設計可能會有不同的問題。 ..然而沒有沒有看到任何關於「on」處理程序的問題。 – milagvoniduak