본문 바로가기

꿀팁 활용

아이폰에서 사용 못하는 정규식( /\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g ) 돈(,) 표시

 

// 제목 관련내용은 =========== 표시 밑부터 입니다.

 

안드로이드 폰에서 문제없이 작동하던 기능  해보고 다했다 짝짝짝 하고 끝냈는데

아이폰에서 동작이 안된다고 뭐라고 한소리 들었다*(테스트용 아이폰을 주던가ㅡㅡ..)

보통 이런식으로 펑션을 쓸텐데 

 

$('select').change(function () { 
	alert('you changed this'); 
});

 

 

이런식 혹은 Uncaught TypeError: $(...).live is not a function

 

$('select').live('change',function () { 
	alert('you changed this'); 
});

 

이런식으로 사용하면 된다고 한다.

 

$('select').bind('change',function () { 
	alert('you changed this'); 
});

 

이런식으로...... 해봤는데 안된다

 

jQuery Mobile로 만들어진 특수성이 문제라는 자료를 찾음.

사이드 메뉴를 두 번, 세 번, 네 번도 불러온다는 것.

 

id는 페이지에서 하나로 유일해야하는데

특수성으로 인해 2개도 되고 3개 4개로 중복된다는 라는 것이었다.

 

1. jQuery로 선택된 값 읽기

 

$("#selectBox option:selected").val();

$("select[name=name]").val();

 

2. jQuery로 선택된 내용 읽기

 

$("#selectBox option:selected").text();

 

======================================================

=================여기까지 이것저것 해봤는데 ..==================

======================================================

 

결국 change 펑션 문제가 아니라 정규식 문제였다.

아이폰 스크립트 로그 보는 방법을 몰라서 원시적으로 한줄 한줄 지우면서 노가다로 알아냈다 ㅠ

 

문제가 있던 정규식은 1,000,000 이런식으로 3자리마다 콤마를 찍어주는 돈표시 정규식 이다.

 

// 안되는 코드
var moneycom =/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g;

element.replace(moneycom, ",")

 

위 정규식에서의 ?<! 와 같은 표기법은 최신 기법으로, 익스 ~11, ios, safari 에서 통하지 않는 스크립트이다.

때문에 위처럼 넣게되면 함수 자체가 에러를 뱉어내므로, 스크립트를 호출하지 못하는 에러가 발생한다.

(object Error / function undefined)

(참고 url : caniuse.com/?search=lookbehind)

 

//되는 코드
var moneycom =/\B(?=(\d{3})+(?!\d))/g;


element.replace(moneycom, ",")

 

위와같이 정규식을 기술해야 익스, ios, safari 에서 정상적으로 함수를 호출할 수 있게 된다.

.

.

.

 

 

브라우저에 다른 기종의 OS나 HTML 렌더링 기술로 비슷하게 만들어 어떤 환경에서도 이상없이 작동되게 하는 것을

Cross Browsing (크로스 브라우징) 이라고 한다는데  외워두고 나중에 찾아봐야겠다.