2013-02-18 1 views
6

데이터 속성 (예 : data-prodcode)에 저장된 일부 제품 코드 (예 : 11E6)가 내부에서 검색 될 때 11000000으로 변환되는 '이상한'상황이 발생합니다 jquery 클릭 기능. 다음과 같은 내용 :E와 숫자가 포함 된 문자열을 숫자로 변환하지 못하게 함

<a data-prodcode="11E6">click</a> 
    var code = $(this).data('prodcode'); 
    console.log(code); --> 11000000 

이 동작을 피하는 방법이나 해결 방법에 대한 조언이 있으십니까? documentation에서

+3

가능한 경우 '. 데이터'가 값을 숫자 또는 부울로 자동 변환하려고 시도하고 '11E6'문자열이 [과학 표기법의 숫자]처럼 보이기 때문입니다 (http://en.wikipedia.org/wiki/ Scientific_notation # E_notation)을 컴퓨터에 전송합니다. – Blazemonger

답변

7

: 모든 시도가 그렇지 이 문자열로 남아있는 자바 스크립트 값 (이 논리 값, 숫자, 객체, 배열 및 널 (null)을 포함한다)에 문자열로 변환되어

. 값의 속성을 변환하지 않고 문자열로 검색하려면 attr() 메소드를 사용하십시오.

당신은 자동 파싱을 ​​방지하기 위해 attr을 사용할 수 있습니다 :

var code = $(this).attr('data-prodcode'); 

가 더 정확하게하려면 이런 일이 안된다. 그리고 사실 그것은 마지막 버전에서 발생하지 않습니다.

if (typeof data === "string") { 
     try { 
      data = data === "true" ? true : 
       data === "false" ? false : 
       data === "null" ? null : 
       // Only convert to a number if it doesn't change the string 
       +data + "" === data ? +data : 
       rbrace.test(data) ? jQuery.parseJSON(data) : 
        data; 
     } catch(e) {} 

그리고 jQuery를 1.8과 1.9에서 작동 : 여기에 현재의 jQuery를의 코드는 (가장 흥미로운 부분은 주석이다)의 백 변환이 발생하지 않는 경우는 문자열을 숫자로 변환하지 않습니다 같은 문자열. 하지만 jQuery 1.7에서는 작동하지 않습니다.

+0

이유를 설명하는 코드에 코드를 추가해야합니다. 따라서 일부 의미가있는 최적화 프로그램은 나중에이 코드를 다시 변경하지 않습니다. – Blazemonger

+1

사실, jQuery의'data' 함수는 문자열에 대해 매우 위험합니다. 여기에 너무 똑똑해 지려고하는 것 같아요. –

+1

글쎄요, 이것은 아마도 최악의 경우 일 것입니다. 어쨌든'.data'보다 더 효율적일 수있는 모든 경우에 문자열을 필요로하는 사용자는 솔루션을 사용할 수 있어야하고 사용해야합니다. – Blazemonger

관련 문제