2011-07-18 4 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(); 
});