jquery内部OOP函数的问题

Problem with jquery inside OOP function

本文关键字:问题 函数 OOP 内部 jquery      更新时间:2023-09-26

你好,我试图在我的OOP函数中获得隐藏元素的值。下面是代码:

var refreshTimeout;
var rms = new RMS();
rms.refresh();
function RMS() {
    this.refresh = function(){
        alert($("#ids").val());
        $.post(refreshUrl, {ids: $("#ids").val()}, function(response){
            var result = $.parseJSON(response);
            if (result != null) {
                $("#rms").attr("value", result.rms);
            }
            refreshTimeout = setTimeout(function() { rms.refresh(); }, 2000);
        });
    }
}

问题是$("#ids").val()在firebug控制台工作,而不是在rms.refresh()…

我做错了什么?

你对$('#ids').val()的调用看起来很好,只要DOM在此时被加载(即在$(document).ready()块中)。

你的计时器功能看起来有点可疑。当你应该引用当前对象时,你引用的是外部作用域中的rms

同样,与计时器相关的值也应该正确地封装在类中,否则就不能有多个实例。

// class definition - can be loaded anywhere
var RMS = function(ids, rms) {
    var self = this;
    var timer = null;
    var delay = 2000;
    this.refresh = function() {
        $.post(refreshUrl, {ids: $(ids).val()},
            function(response) {
                var result = $.parseJSON(response);
                if (result != null) {
                    $(rms).attr("value", result.rms);
                }
                timer = setTimeout(function() {
                    self.refresh();
                }, delay);
            }
        );
    };
};
// invocation deferred until the DOM is ready
$(document).ready(function() {
   var rms = new RMS('#ids', '#rms');
   rms.refresh();
});

试试下面的代码:

$(document).ready(function(){
    var refreshTimeout,
        rms = new RMS();
    rms.refresh();
    function RMS() {
        this.refresh = function(){
            $.post(refreshUrl, {ids: $('#ids').val()}, function(response){
                if (typeof(response) != 'undefined') {
                    $('#rms').attr('value', response.rms);
                }
                refreshTimeout = setTimeout(function() { rms.refresh(); }, 2000);
            }, 'json');
        }
    }
});