[英]jQuery object-oriented created dom element and add event listener
我有一個小問題。 我在一個對象中創建了一些元素並且工作正常。 但是現在我想添加一些 EventListeners 來執行我的對象內部的函數,問題是我無法執行函數“setSelection”。 (“this”不是對象的“this”,而是點擊函數內部事件的“this”)。
function Object() {
this.init = function () {
// delete table
// ...
// set table
$('tr').append('<td id="1">test</td>');
$('td').click(function() {
// execute setSelection
});
}
this.setSelection = function(x) {
alert('You clicked id ' + x);
}
}
$(document).ready(function() {
x = new Object();
x.init();
});
$('td').click((function(e) {
// execute setSelection
this.setSelection(...);
}).bind(this));
您可以通過將this
在外部作用域中的引用存儲到可在click
事件處理程序中使用的變量來解決此問題:
function Object() {
var _this = this;
this.init = function () {
// delete table
// ...
// set table
$('tr').append('<td id="1">test</td>');
$('td').click(function() {
_this.doSomething();
});
}
this.setSelection = function(x) {
alert('You clicked id ' + x);
}
}
我的方法是:
function Object() {
this.init = function () {
// delete table
// ...
// set table
$('tr').append('<td id="1">test</td>');
$('td').click(function() {
setSelection(this);
});
}
setSelection = function(x) {
alert('You clicked id ' + x);
}
}
我已經解決了問題...
function Object() {
this.init = function () {
// delete table
// ...
// set table
$('tr').append('<td id="1">test</td>');
this.setSelection();
}
this.setSelection = function() {
$('td').click(function() {
alert('You clicked id ' + $(this).attr('id'));
});
}
}
$(document).ready(function() {
x = new Object();
x.init();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.