jQuery面向对象创建了dom元素并添加了事件监听器

时间:2017-01-19 14:46:01

标签: javascript jquery function object execute

我有点问题。我在一个对象中创建了一些元素并且工作正常。但是现在我想添加一些EventListeners来执行一个函数内部我的对象,问题是我无法执行函数“setSelection”。 (“this”不是对象的“this”,而是事件的“this”在click-function内部。)

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();
});

4 个答案:

答案 0 :(得分:1)

    $('td').click((function(e) {
        // execute setSelection
        this.setSelection(...);
    }).bind(this));

答案 1 :(得分:1)

您可以通过将外部作用域中的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);
    }
}

答案 2 :(得分:0)

我的方法是:

app indexing

答案 3 :(得分:0)

我已经解决了这个问题...

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();
});