2010-08-19 3 views
1

그래서 사이트에서 작업하고 있으므로 jQuery가 페이지에 작성되기 전에 정의되어 있는지 확인해야합니다. JS 조건부 속기를 사용하도록 변환하고 싶지만, 그럴 때 어떤 이유로 문이 실행되지 않습니다. 여기 내 코드는 다음과 같습니다.JS shorthand를 사용하여 jQuery 포함하기

Original (this works, tested): 

if (typeof jQuery == 'undefined') { 
    document.write('<script type="text/javascript" src="', JSPATH_REL_symc + 'jquery-1.4.2.min.js','"><\/script>'); 
} 

그 버전은 완벽하게 작동합니다. 지금이 그것을 대체하고, 어떤 이유로 나는 문제에 봉착 :이 구문에 어떤 문제가 있는지

New w/Shorthand: 

(typeof jQuery == 'undefined') ? document.write('<script type="text/javascript" src="', JSPATH_REL_symc + 'jquery-1.4.2.min.js','"><\/script>') : ''; 

어떤 생각을?

감사합니다.

+0

문제가있는 브라우저는 무엇입니까? –

+0

때로는 속기가 항상 최상의 것은 아닙니다. 또한 문서 열기 및 닫기 호출이 있어야합니다. – balupton

답변

3

언뜻보기에는 잘못 표시되지 않습니다. (var JSPATH_REL_symc은 다른 곳에 정의되어 있습니까?). 코드는 약간 펑키하고 (문자열 연결과 여러 인수를 document.write - document.write(str, str2 + str3, str4)에 섞음) 쉽게 수정할 수 있습니다. ,

this.jQuery || document.write('<script src="' 
           + JSPATH_REL_symc 
           + 'jquery-1.4.2.min.js"><\/script>'); 

script 태그의 type 속성은 필수 아닌 모든 브라우저가 암시 적으로 그 내용을 평가합니다 또는 자바 스크립트로 링크 된 파일 : 또한 당신은 코드를 좀 더 단순화 (그리고 단축) 할 수 있도록해야한다.

빠른 테스트 작업에이 코드를 보여줍니다 http://jsfiddle.net/ZWQqM/을 (마이너스 JSPATH 인수 및 스크립트 태그에 "온로드"이벤트 속성에 추가하면 성공이 있음을 입증 할 수 있습니다.)

+1

'type' 속성은 필수는 아니지만 HTML4/5 호환성을 통과해야합니다. –

+1

@Topher : 바로 남자입니다. @ Ryan :이 코드는 훌륭합니다. 물론 attr 형식을 포함하게 될 것입니다. :) 아래의 내 응답을 참조하십시오. 다중 매개 변수. –

1

귀하의 코드가 조금 보인다 조건부의 두 번째 부분에서 실제로 아무것도 수행하지 않아서 구문 오류가 발생했을 가능성이 높습니다. 유효하지 않은

''; 

: 조건이 거짓 인 경우

기본적으로, 나는 그것이로 평가하는 것 같아요. 일반적으로, 당신은 다음과 같이 사용합니다 :

var someString = (someTest == true) ? "Great" : "Bad"; 
document.write(someString); 

당신이 조건의 내부 document.write을 사용하고 있기 때문에,

  1. 이동합니다 document.write의 조건 내부, 또는
  2. 이 시도 조건부

의 제 2 부분에서 인용 부호를 제거 :

// Option 1 
document.write((typeof jQuery == 'undefined') ? '<script type="text/javascript" src="', JSPATH_REL_symc + 'jquery-1.4.2.min.js','"><\/script>' : ''); 


// Option 2 -- EDIT: This apparently isn't valid syntax due to the : ; at the end. Thanks @LarsH 
(typeof jQuery == 'undefined') ? document.write('<script type="text/javascript" src="', JSPATH_REL_symc + 'jquery-1.4.2.min.js','"><\/script>') : ; 
을 나는 당신이 두 가지 옵션이 생각

개인적으로 나는 if 성명이 더 분명하다고 생각합니다.

편집 : 아래의 코멘트에 라이언에 의해 언급 한 바와 같이, '';이 유효한지, 그래서 특정 코드가 오류를 던지는 이유를 확실히 모르겠어요. 스크린 샷이나 오류에 대한 설명을 줄 수 있습니까?

+2

사실,' '';은 유효한 문입니다. http://jsfiddle.net/RGPyr/ JavaScript Strict 모드는 다음 문으로 활성화됩니다. ''사용 엄격 '; –

+3

+1 : if/else에 일반적으로 추악한 것으로 간주되는 3 진수를 사용하여 뒤따라 오는 것이 가장 쉽지는 않다. 우리 회사 표준은 그것을 허용하지 않습니다. 그것은 우리가 그것을 사용하지 않는다는 것을 말하는 것은 아니며, 표현의 결과가 사용 될 때 (asker의 예에서는 무시됩니다). Topher의 제안은보다 세련된 3 행을 사용하지만 document.write (""); 나는 당신이 document.write에 여러 개의 매개 변수를 전달할 수 있다는 것을 알지 못했지만 연결될 것입니다. 연결을 여러 매개 변수와 함께 사용해서는 안됩니다. –

+0

+1 @Ryan Tenney - 링크를 제공해 주셔서 감사합니다. 나는 그것이 그것이 유효하다는 것을 깨닫지 못했다. 그에 따라 내 대답 업데이트. –