Javascript 如何在jQuery事件中访问对象方法

Javascript 如何在jQuery事件中访问对象方法,javascript,jquery,oop,Javascript,Jquery,Oop,在jQuery的帮助下,我正在尝试用JavaScript设计一个面向对象的应用程序。但是,我在应用程序类中使用jQuery事件处理程序时遇到了问题。以下是令人不快的代码片段: <script type="text/javascript"> function Library(s_list) { this.songs = s_list; this.song_table = $('#songs'); this.search_input = $('#search-tx

在jQuery的帮助下,我正在尝试用JavaScript设计一个面向对象的应用程序。但是,我在应用程序类中使用jQuery事件处理程序时遇到了问题。以下是令人不快的代码片段:

<script type="text/javascript">
function Library(s_list) {
    this.songs = s_list;
    this.song_table = $('#songs');
    this.search_input = $('#search-txt');

    this.refresh_table = function() {
        this.song_table.html('<tr id="fields"><td></td><td>Name</td><td>Artist</td><td>Album</td><td>Time</td></tr>');

        for ( index in this.songs ) {
            if ( (index % 2) == 0 ) {
                this.song_table.append('<tr class="l"><td></td><td>' + this.songs[index] + '</td><td>Artist</td><td>Album</td><td>Time</td></tr>');
            } else {
                this.song_table.append('<tr class="d"><td></td><td>' + this.songs[index] + '</td><td>Artist</td><td>Album</td><td>Time</td></tr>');
            }
        }
    }

    this.filter_songs = function(text) {
        // Not implemented
    }

    this.search_input.keyup(function() {
        var sender = $(this);
        var s = $.trim(sender.val());

        // I need to access the filter_songs method of the Library class here. Normally I would use "this" but jQuery uses it for the html object that triggered the event
    });

    this.refresh_table();
}

var library;

$(document).ready(function() {
    library = new Library(song_list);

});

</script>

函数库(s_列表){
this.songs=s_列表;
this.song_table=$('#songs');
this.search_input=$('search txt');
this.refresh_table=函数(){
this.song_table.html('NameArtistAlbumTime');
for(此.songs中的索引){
如果((索引%2)==0){
this.song_table.append(“”+this.songs[index]+'ArtistAlbumTime');
}否则{
this.song_table.append(“”+this.songs[index]+'ArtistAlbumTime');
}
}
}
this.filter_songs=函数(文本){
//未实施
}
this.search\u input.keyup(函数(){
var sender=$(此值);
var s=$.trim(sender.val());
//我需要在这里访问Library类的filter\u songs方法。通常我会使用“this”,但jQuery会将其用于触发事件的html对象
});
这是一个.refresh_table();
}
var库;
$(文档).ready(函数(){
图书馆=新图书馆(歌曲列表);
});

问题是我需要从jQuery search\u input.keyup事件处理程序访问库类的filter\u songs方法。通常我会使用“this”,但jQuery将其用于触发事件的html对象。我是否在处理此应用程序的设计时出错,或者是否有办法解决此问题?谢谢你的帮助。

你需要结束。试试这个:

var self = this;
this.search_input.keyup(function() {
            var sender = $(this);
            var s = $.trim(sender.val());
            self.filter_songs(s);
        });

谢谢这正是我所需要的。这是一个明显的解决办法,但我想我的大脑今天工作不好。:)我们将度过阴天!