Проблема с jquery внутри функции ООП - PullRequest
3 голосов
/ 18 июля 2011

Здравствуйте, я пытаюсь получить значение скрытого элемента в моей функции ООП.Вот код:

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 () ...

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Ваш вызов $('#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();
});
0 голосов
/ 18 июля 2011

Попробуйте этот код:

$(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');
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...