2011-07-18 33 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()...

我做錯了嗎?

+1

您的JavaScript是否具有文檔就緒功能? – bcoughlan

回答

1

你的$('#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

嘗試此代碼:

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