2011-07-18 5 views
3

こんにちは私はOOP関数で隠し要素の値を取得しようとしています。OOP関数内のjqueryの問題

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()放火犯コンソールで動作しますが、内部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'); 
     } 
    } 
}); 
+1

Javascriptはドキュメント対応の機能の中にありますか? – bcoughlan

答えて

1

$('#ids').val()のあなたの呼び出しが正常に見える限りDOMは、この時点でロードされる(すなわち$(document).ready()ブロック内):

0

は、このコードを試してみてください。

あなたのタイマー機能は少し疑わしいですね。あなたは現在のオブジェクトが何であるかを参照するべきときに、外側のスコープにある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(); 
});