2013-04-18 2 views
0

자바 스크립트를 사용하여 제출시 계산을 수행 할 때 오류가 발생합니다. pay_amount 입력은 pay_amount 값에 관계없이 '1'을 제출하고 total_charged는 '4.95'를 제출합니다. 여기 HTML 입력 ID의 자바 스크립트 계산은 항상 1이됩니다.

<form method="POST" action="example-post-url.php" autocomplete="off" name="form" id="form"> 

    <input type="text" id="pay_amount" name="pay_amount" value="1,794.00"/> 
    <input type="hidden" id="total_charged" name="total_charged" /> 

    <input type="submit" value="submit" onclick="submitCard();" id="submitButton"/> 

</form> 

는 자바 스크립트입니다 : 여기

는 HTML입니다

<script> 
    function submitCard(){ 

     var payment = parseFloat(document.getElementById('pay_amount').value); 
     var fee = ((payment*0.035)+3.95); 
     var total = payment + fee; 
     document.getElementById('total_charged').value = total.toFixed(2); 

     document.form.submit(); 
    } 
</script> 

내가 쉼표에 문제가 있었다 생각 아래 코드와 VAR 지불을 교체 시도했습니다,하지만 난 ' 아직도 문제가 생겼어.

var payment = document.getElementById('pay_amount').value.replace(/,/g, ''); 

세계에서 어떤 일이 일어나고 있습니까?

+0

정말 거기 코드 "pay_amount"가 "1"로 서버에 제출되고, 의심

다음은 중요한 부분입니다. – Pointy

답변

1

원래는

<form ... onsubmit="return false;" ...> 

    ... 

</form> 
0

당신은 지금 무엇을 가지고있는 대신 document.forms.submit()

document.forms[0].submit(); 

시도 제출 방지해야한다.
document.form이 정의되지 않았으므로이 문제를 해결하는지 여부에 관계없이이 값을 변경해야합니다.

+0

그러나 귀하의 코드는 모범 사례에 비해 더 적절하며 OP는 귀하의 조언을 따라야합니다. '문서.이 문서에서는 "form"이라는 양식 요소가 있기 때문에이 경우에는 양식이 정의되지 않았습니다. – Luc125

+0

@ Luc125 그걸 잡지 못했어요. –

1

은 유효한 숫자의 일부가 아닌 무언가를 볼 때이

<input type="button" value="submit" onclick="submitCard();" id="submitButton"/> 

대신

<input type="submit" value="submit" onclick="submitCard();" id="submitButton"/> 
3

parseFloat() 루틴 정지는 구문 분석을 시도합니다. 귀하의 경우, 그것은 쉼표입니다.

게시물에서 제안한대로 코드를 변경하면 쉼표 문제가 해결되지만 값은 문자열로 남겨 둡니다. 두 개를 합치면 —은 쉼표 을 제외하고 parseFloat() —으로 전화하면 더 잘 작동합니다.

그렇다면 서버에서 결제 및 요금 계산을 확인하지 않을 경우 전자 상거래 사이트의 URL을 게시하십시오.

0

다행히도이 형식의 submit 이벤트와 아무 관련이 없으며 value 특성의 문자열 유형이 수학 연산의 숫자로 변환되는 방식과 관련이 있습니다.

parseFloat() 사용 방법은 JSFiddle을 확인하십시오.

parseFloat(document.getElementById('pay_amount').value.replace(',', '')); 
+0

** REMEMBER ** 프로덕션 환경에 배포하기 전에 console.log() 디버깅 문을 제거하십시오. – oomlaut

1

이 시도 :

<script> 
    function submitCard(){ 

     var payment = parseFloat(document.getElementById('pay_amount').value); 
     var fee = ((payment*0.035)+3.95); 
     var total = payment + fee; 
     document.getElementById('total_charged').value = total.toFixed(2); 
    } 
</script> 
관련 문제