테스트 사이트 - 개발 중인 베타 버전입니다

자바스크립트 문제 다시 질문드립니다. 채택완료

앤시아 6년 전 조회 10,132

죄송합니다. 문제가 해결되지 않아 다시 올립니다.

 

상품상세보기 게시판에 원화표시를 환율 API를 가져와서 달러와 같이변환하여 보여주려 합니다.

 

Jsfiddle로 환율변환은 확인하였는데 적용하는게 되질 않네요.

 

https://jsfiddle.net/oxy5qk72/" rel="nofollow">https://jsfiddle.net/oxy5qk72/

 

아래는 shop.js 코드중 계산하기 부분입니다.

 

</p>

<p>// 가격계산</p>

<p>function price_calculate()</p>

<p>{</p>

<p>    var it_price = parseInt($("input#it_price").val());</p>

<p> </p>

<p>    if(isNaN(it_price))</p>

<p>        return;</p>

<p> </p>

<p>    var $el_prc = $("input.io_price");</p>

<p>    var $el_qty = $("input[name^=ct_qty]");</p>

<p>    var $el_type = $("input[name^=io_type]");</p>

<p>    var price, type, qty, total = 0;</p>

<p> </p>

<p>    $el_prc.each(function(index) {</p>

<p>        price = parseInt($(this).val());</p>

<p>        qty = parseInt($el_qty.eq(index).val());</p>

<p>        type = $el_type.eq(index).val();</p>

<p> </p>

<p>        if(type == "0") { // 선택옵션</p>

<p>            total += (it_price + price) * qty;</p>

<p>        } else { // 추가옵션</p>

<p>            total += price * qty;</p>

<p>        }</p>

<p>    });</p>

<p> </p>

<p>    $("#sit_tot_price").empty().html("<span class='zex' cur='KRW>'총 금액 :</span> "+number_format(String(total))+" KRW");</p>

<p>if($(".zex")[0]){</p>

<p>    $.getJSON('<a href="https://api.exchangeratesapi.io/latest?base=USD')" target="_blank" rel="noopener noreferrer">https://api.exchangeratesapi.io/latest?base=USD')</a></p>

<p>    .done(function(data){</p>

<p>        $('.zex').each(function() {</p>

<p>            var cur = $(this).attr('cur');</p>

<p>            if( cur == undefined ) return;</p>

<p>            var old = $(this).text();</p>

<p>            var total = Math.abs(old.match(/\d+/)[0]/data.rates[cur]);</p>

<p>            total = num.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')</p>

<p>            $(this).html( old + ' - '+ total +' USD (예상금액)');</p>

<p>      </p>

<p>        })</p>

<p>    })</p>

<p>}</p>

<p>}</p>

<p>

 

매개변수 total을 가져와 적용시키면 값이 나타나질 않네요.

 

어디가 잘못인지 어제 오늘 이 문제로 여기저기 검색해도 풀리지 않네요.
아래는 해당 테스트 상품페이지입니다.

 

http://ncia.raonnet.com/kr/shop/item.php?it_id=1568106267">http://ncia.raonnet.com/kr/shop/item.php?it_id=1568106267

댓글을 작성하려면 로그인이 필요합니다.

답변 5개

채택된 답변
+20 포인트

</p>

<p><span class='zex' cur='KRW'>4500000</span></p>

<p> </p>

<p><script src='//code.jquery.com/jquery.min.js'></script>

<script>

if($(".zex")[0]){

    $.getJSON('<a href="https://api.exchangeratesapi.io/latest?base=USD')" target="_blank" rel="noopener noreferrer">https://api.exchangeratesapi.io/latest?base=USD')</a>

    .done(function(data){

        $('.zex').each(function() {

            var cur = $(this).attr('cur');

            if( cur == undefined ) return;

            var old = $(this).text();

            var num = Math.abs(old.match(/\d+/)[0]/data.rates[cur]);

            num = num.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')

            $(this).html( old + ' (약 '+ num +' USD)');

      

        })

    })

}

</script></p>

<p>

 

이렇게 했을때는

4500000 (약 3,782.79 USD)

으로 잘 나오네요.

 

<span class='zex' cur='KRW'>4,500,000</span>

이렇게 단위구분 콤마가 들어가는경우 

4,500,000 (약 0.00 USD)

으로 출력이 안되네요.

 

작성하신 내용중에 두가지정도 보이는데

+number_format(String(total))+

number_format을 빼보시고

 

total = num.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')

num부분을 total 로 바꾸신후 테스트한번 해보셔요.

 

 

--------------------------------------------

추가답변

 

cur='KRW 이부분
cur='KRW' 안닫혔네요 ' << 요거

 

아니면

$("#sit_tot_price").empty().html("<span class='zex' cur='KRW'>'총 금액 :</span> "+number_format(String(total))+" KRW");

 

위 부분을 아래와같이 숫자만 나오도록 수정하시고(원본으로)

$("#sit_tot_price").empty().html(+String(total)+);

 

<div id="sit_tot_price"></div>
여기서 가격금액이 찍히니까

 

<div id="sit_tot_price" class="zex" cur="KRW"></div>
이렇게 숫자가 찍히는 div에서 테스트해보세요

 

cur='KRW' 끝에 꼭 닫아주세요 ㅎ

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

앤시아
6년 전
펄스나인님 답변 너무 감사드립니다.
변수 num를 total로 변경하고 했는데도 마찬가지네요.
다시 해보겠습니다. 답변 정말 감사드립니다.
펄스나인
6년 전
아 찾은것 같습니다 ㅎ

$("#sit_tot_price").empty().html("<span class='zex' cur='KRW>'총 금액 :</span> "+number_format(String(total))+" KRW");

이부분에 문제는
<span class='zex' cur='KRW>'총 금액 :</span>
여기에 있어요

<span class='zex' cur='KRW'> 이 안에 숫자가 있어야 되는데 </span>

<span class='zex' cur='KRW'> 총 금액 : </span> 하고 span 이 닫혀버리고
그뒤에 +number_format(String(total))+ 숫자가 들어가니 출력이 안됬던거고

$("#sit_tot_price").empty().html("<span class='zex' cur='KRW'>총금액 : "+String(total)+" KRW</span>");

금액이 잘 찍힌다고 가정했을때 이렇게 해도 될거같습니다.
펄스나인
6년 전
+number_format(String(total))+
number_format 을 쓰면 정확하게 계산이 안되는걸로 확인되네요. ㅠ
추가 코딩이 필요할거 같습니다.

댓글을 작성하려면 로그인이 필요합니다.

6년 전

사랑합니다.

벼라별 방법으로 해보다 펄스나인님 덕분에 힌트를 얻었습니다.

 

답변 너무 감사드립니다. ^^

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

펄스나인
6년 전
답은 못됬지만 그래도 다행이네요 ^^

댓글을 작성하려면 로그인이 필요합니다.

6년 전

</p>

<p>// 가격계산</p>

<p>function price_calculate()</p>

<p>{</p>

<p>    var it_price = parseInt($("input#it_price").val());</p>

<p> </p>

<p>    if(isNaN(it_price))</p>

<p>        return;</p>

<p> </p>

<p>    var $el_prc = $("input.io_price");</p>

<p>    var $el_qty = $("input[name^=ct_qty]");</p>

<p>    var $el_type = $("input[name^=io_type]");</p>

<p>    var price, type, qty, total = 0;</p>

<p> </p>

<p>    $el_prc.each(function(index) {</p>

<p>        price = parseInt($(this).val());</p>

<p>        qty = parseInt($el_qty.eq(index).val());</p>

<p>        type = $el_type.eq(index).val();</p>

<p> </p>

<p>        if(type == "0") { // 선택옵션</p>

<p>            total += (it_price + price) * qty;</p>

<p>        } else { // 추가옵션</p>

<p>            total += price * qty;</p>

<p>        }</p>

<p>    });</p>

<p> </p>

<p>    $("#sit_tot_price").empty().html("<span class='zex' cur='KRW>'총 금액 :</span> "+number_format(String(total))+" KRW");</p>

<p>if($(".zex")[0]){</p>

<p>    $.getJSON('<a href="https://api.exchangeratesapi.io/latest?base=USD')" target="_blank" rel="noopener noreferrer">https://api.exchangeratesapi.io/latest?base=USD')</a></p>

<p>    .done(function(data){</p>

<p>        $('.zex').each(function() {</p>

<p>            var cur = $(this).attr('cur');</p>

<p>            if( cur == undefined ) return;</p>

<p>            var old = $(this).text();</p>

<p>            var num = Math.abs(old.match(/\d+/)[0]/data.rates[cur]);</p>

<p>            num = num.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')</p>

<p>            $(this).html( old + ' - '+ num +' USD (예상금액)');</p>

<p>      </p>

<p>        })</p>

<p>    })</p>

<p>}</p>

<p>}</p>

<p>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

플래토
6년 전

스크립트오류납니다.

$("#sit_tot_price").empty().html("<span class='zex' cur='KRW>'총 금액 :</span> "+number_format(String(total))+"&nbsp;KRW");
if($(".zex")[0]){
    $.getJSON('https://api.exchangeratesapi.io/latest?base=USD')
    .done(function(data){
        $('.zex').each(function() {
            var cur = $(this).attr('cur');
            if( cur == undefined ) return;
            var old = $(this).text();
            var total = Math.abs(old.match(/\d+/)[0]/data.rates[cur]);
            total = num.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')
            $(this).html( old + ' - '+ total +' USD (예상금액)');
      
        })
    })

에서

 

total = num.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')

에서 오류걸리네요

num 이 없다고..

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

앤시아
6년 전
이것저것 만져보느라 변수변경해서 생긴 오류입니다. ftp랑 위에 코드로 다시 수정하였습니다.

댓글을 작성하려면 로그인이 필요합니다.

6년 전

저도 궁금해요.

해당코드를 배포한곳에 보니 거기선 잘 되던데...

같은 코드를 다른곳으로 가져오니 안되요.

코드 오류가 아닌것 같나요.

아래 코드가 제대로 작동을 하지 않는 것 같아요.

$.getJSON('https://api.exchangeratesapi.io/latest?base=USD">https://api.exchangeratesapi.io/latest?base=USD')

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

앤시아
6년 전
URL 클릭해보시면 정상적으로 Json 데이터가 찍히거던요.
제가 붙인 스크립트 코드 문제입니다. ㅠㅠ
https://api.exchangeratesapi.io/latest?base=USD

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인