2010-04-26 6 views
0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<HEAD> 
<script type="text/javascript" src="lb-core.js"></script> 
<script type="application/javascript"> 
var lbp = { 
    defaults: { 
     color: "blue" 
    }, 
    init: function(config) { 
     if(config) { 
      for(prop in config){ 
       setBgcolor.defaults[prop] = config[prop]; 
      } 
     } 
     var bod = document.body; 
     bod.style.backgroundColor = setBgcolor.defaults.color; 
    } 
} 
window.onload = lbp.init(); 
</script> 
</HEAD> 
<body> 
<div id="container">test</div> 
</body> 
</HTML> 

window.onload에서 위를 호출 할 때 왜 bod가 undefined로 돌아 옵니까? ... bod 다시 코드에서 정의되지 않은 오는 이유를 모르겠어요변수가 정의되지 않음

var bod = document.body;

는 크롬에 나를 위해 작동 :

+0

자바 스크립트와 HTML을 더 많이 게시하면 도움이됩니다. 한 가지 가능성은 코드가 onload 핸들러에서 실행되지 않고 body 태그가 표시되기 전에 head의 script 태그가 구문 분석 될 때 대신 실행되고 있다는 것입니다. – Pointy

+0

body 태그 뒤에 스크립트를 넣으십시오. – Kasturi

답변

2

귀하의 코드는 여기에 전체 수정의 몇 teaks이 필요합니다 :

var lbp = { 
    defaults: { 
     color: "blue" 
    }, 
    init: function(config) { 
     if(config) { 
      for(prop in config){ 
       lbp.defaults[prop] = config[prop]; 
      } 
     } 
     var bod = document.body; 
     bod.style.backgroundColor = lbp.defaults.color; 
    } 
} 
window.onload = lbp.init; 

는 즉시 window.onload = lbp.init() 때문에 온로드 기능에 lbp.init결과를 할당했다 init를 호출 한 이전, 실제 기능을 할당하지, 이것은 위에 수정되었습니다.

코드에서 setBgcolor의 출처가 확실하지 않으므로 여기서 lbp을 의미한다고 생각합니다. 위의 동일한 코드에서 작동하므로 테스트 해보십시오.

+0

네, 시체가 작동 한 후에도 그 다른 설정 호출을 깨달았습니다. 감사! – Matrym

+0

Nick - window.onload = lbp.init에서 parens를 사용하지 않으면 config에서 pas로 설정해야합니다. 기본 구성보다 우선합니다. – Matrym

+0

@Matrym - 다음과 같이 익명의 함수를 사용할 수 있습니다 :'window.onload = function() {lbp.init ({optionsHere}); }; –

1

이보십시오. 어떤 브라우저를 실행하고 있습니까?

또한 bod이 정의되지 않았습니까? 아니 setBgcolor 또는 다른 뭔가?

편집 :

변경이 코드 줄이로

window.onload = lbp.init();

:

window.onload = lbp.init;

당신은 LPD의 결과을 할당하고 . init()에서 onload .. 그냥 참조를 지정해야합니다.

window.onload = lbp.init; 

당신이 window.onload = lbp.init() 쓰기

+0

전체 페이지 코드가 추가되었습니다. 파이어 폭스에서 뛰기. – Matrym

+0

@Martym 내 편집보기 – Matt

+0

감사합니다. Matt - 돈에 관해서. – Matrym

3

변경은, 당신은 init 기능를 호출하고 window.onload에 반환 무엇이든 할당 할 수 있습니다.
따라서 함수는 (창을로드하기 전에) 바로이고 undefinedwindow.onload으로 지정됩니다. (init은 아무 것도 반환하지 않기 때문에)

함수를 호출하지 않고 onload에 할당해야합니다.

+0

고마워요, 당신은 슬랙 이예요 :) – Matrym

관련 문제