11

자리 표시 자 지원을 테스트해야합니다. 다음의 모든 최신 브라우저에서 멋진 작품뿐만 아니라, IE7, IE8, IE9 : 그것은 작동하지만, JSLint는 in의 사용에 대해 불평HTML5 자리 표시 자 기능 감지 문제

$.support.placeholder = (function() { 
    var i = document.createElement("input"); 
    return "placeholder" in i; 
}()); 

: '에서'

예기치. undefined와 비교하거나 hasOwnProperty 메서드를 대신 사용하십시오.

좋아, 그래서 나는이에 리팩토링 것 : 이제

$.support.placeholder = (function() { 
    var i = document.createElement("input"); 
    return i.hasOwnProperty("placeholder"); 
}()); 

이 오류 또는 경고없이 JSLint를 전달하지만이 오래된 밤나무와 IE7과 IE8에서 나누기 :

개체 우리로 속성 또는 메서드 'hasOwnProperty'JSLint을 행복하게하는 방법

어떤 생각을 지원하지 않습니다 IE7과 IE8 로요?

+2

jslint와 같은 도구를 행복하게 만드는 것은 내가하는 일을 잘 아는 한 반드시 코드를 향상시키는 것을 의미하지는 않습니다. 당신의 상사가 그것을 원한다면, 그들에게 어리석은 그들을 증명하는 좋은 예를 보여주십시오. – ThiefMaster

+0

jslint가'in'을 추천하는 이유는 없습니다. 잠시 동안 주변에 있었기 때문에 완전한 지원이 있어야하며 꽤 직관적입니다. 자리 표시 자 지원의 경우 이는 단색입니다. https://github.com/mathiasbynens/jquery-placeholder – ryanve

답변

15

는 또한 JSLint이 시사하는 다른 솔루션을 사용할 수 있습니다.

+0

이것 역시 잘 작동하고 매우 간결합니다. 오류 메시지를 읽는 데 신경 써야한다면 ......... – karim79

+2

사실 JSLint는 return i.placeholder! == undefined;를 사용하기를 원합니다. 만약 당신이'typeof i.placeholder! == 'undefined';'를 사용하려고한다면 그렇게 말할 것입니다. – MHollis

3

Object.prototype을 통해 함수를 가져올 수 있습니다. 그러면 요소에서 call을 가져올 수 있습니다. 이 당신이 i.hasOwnProperty - 패션 방법으로 호출 할 수있는 사용할 수있는 기능에 대한 수 (i 그것을 뒤에서 this 값 호출 즉 경우) :

Object.prototype.hasOwnProperty.call(i, "placeholder"); 
+0

잘 작동합니다. 대답 주셔서 감사합니다 :) – karim79

+0

흠, 어느 쪽이 좋을까요. – karim79

+0

@ karim79 :이 속성은 'undefined'로 설정 될 수 있지만 다른 한편으로는 함수 호출 오버 헤드를 발생시킵니다. – pimvdb

5

내 대답은 돈이 될 것 ' 티. JSLint를 행복하게하지 마라. JSLint는 Crockford가 JavaScript를 어떻게 처리해야 하는지를 보여줍니다. 그것은 그의 개인적인 기준입니다. 자바 스크립트에 어떤 종류의 린트가 필요하면 JSHint을 사용하십시오. 완전히 구성 가능하고 미친 요구 사항이없는 JSLint의 포크 버전입니다. 그것의 홈페이지로부터 :

JSHint는 Douglas Crockford에 의해 작성되고 관리되는 JSLint의 포크입니다.

이 프로젝트는 원래의에 하나 개 특정 코딩 스타일을 적용 할 사용자-하지만 자신과 별도의 정적 분석 도구로 변환하지 않습니다 JSLint - 하나의 더 구성 버전을 만들기위한 노력으로 시작 목표와 이상.

return typeof i.placeholder !== 'undefined'; 

이 문제없이 크로스 브라우저를 작동합니다 :

+0

동의하지만, 불행히도 내 결정은 아닙니다. 적어도 당분간은 그걸로 살아야합니다. 어쨌든 +1하십시오. – karim79