【发布时间】:2016-02-21 01:12:16
【问题描述】:
我有一个表格将计算的金额发送到贝宝。有三个单选按钮,我选择第一个按钮时没有问题,它会正确计算并将正确的数据发送到贝宝。第二个和第三个是我的问题,当我选择第二个和第三个时,第一个按钮的前一个值或数据将被发送到贝宝,而不是第二个或第三个值。这是一个工作表格,只是它没有向贝宝发送适当的金额如果我选择另一个单选按钮(#cat-both 工作正常,而 #cat-loto 和 #cat-aerial 没有提交正确的值,#cat-both 的值总是发送到 paypal) (这是用户 Alain Nisam 回答的问题,stackoverflow)
HTML
<div>
<p>$50.00 per class/person <br />Sign up for both for $90.00</p>
</div>
<div>
<form id="paypal_submit_form" action="https://www.paypal.com/cgi-bin/webscr" target="_blank" method="post">
<input name="cmd" type="hidden" value="_cart" />
<input name="upload" type="hidden" value="1" />
<input name="charset" type="hidden" value="utf8" />
<input name="business" type="hidden" />
<input name="currency_code" type="hidden" value="USD" />
<input name="custom" type="hidden" />
<input name="amount" type="hidden" />
<input name="first_name" type="hidden" />
<input name="last_name" type="hidden" />
<input name="address1" type="hidden" />
<input name="city" type="hidden" />
<input name="state" type="hidden" />
<input name="zip" type="hidden" />
<input name="email" type="hidden" />
<input name="night_phone_b" type="hidden" />
<input name="address_override" type="hidden" value="1" />
<div id="paypal_prs" style="font-size: 12px;">
<p>
<input id="cat-both" checked="checked" name="cat" type="radio" value="90" />
<label for="cat-both">Both</label>
<input id="cat-aerial" name="cat" type="radio" value="50" />
<label for="cat-aerial">Aerial</label>
<input id="cat-loto" name="cat" type="radio" value="50" />
<label for="cat-loto">Lockout/Tagout</label>
</p>
<br /> Members:
<select id="bal_number_of_members" style="font-size: 12px; padding: 3px;" name="number_of_members">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
</select>
<br /> Total Amount (Cost + Processing Fee):
<input style="width: 50px; margin-right: 10px; padding: 2px; padding-bottom: 1px; font-size: 12px;" name="tmp_total_amount" readonly="readonly" type="text" value="93" />
<input id="bal_submit_btn" style="padding: 3px 5px; font-size: 12px; cursor: pointer;" type="button" value="Pay Here" />
<input name="item_name_1" type="hidden" value="2016 Train-The-Trainer Workshops(AERIAL LIFTS & LOCKOUT/TAGOUT)" />
<input name="amount_1" type="hidden" value="90" />
<input name="quantity_1" type="hidden" value="1" />
<input name="item_name_2" type="hidden" value="Processing fee" />
<input name="amount_2" type="hidden" value="0" />
<input name="quantity_2" type="hidden" value="1" />
</div>
<input name="notify_url" type="hidden" value="http://some.org/tmp_ipn.php" />
<input name="return" type="hidden" value="http://some.org/" />
<input name="cancel_return" type="hidden" value="http://some.org/index.php?view=article&id=278" />
<input name="no_shipping" type="hidden" value="1" />
</form>
</div>
JS
<script src="jquery-1.11.3.min.js"></script>
<script>
function getPayPalProcessingFee() {
var qty = $('#paypal_submit_form select[name=number_of_members]').val();
qty = parseInt(qty);
var current_index = $("input[name=cat]:checked").attr('id');
switch (current_index){
case 'cat-both':
return 3*qty;
break;
case 'cat-aerial':
return 1.8*qty;
break;
case 'cat-loto':
return 1.8*qty;
break;
default:
return 0;
}
}
function trainthetrainerForm_calculateFee() {
var fee = getPayPalProcessingFee();
return fee;
}
function trainthetrainerForm_calculateItemAmount() {
var qty = $('#paypal_submit_form select[name=number_of_members]').val();
var current_val = $("input[name=cat]:checked").val();
console.log(current_val);
var amount = parseInt(qty) * current_val;
amount = parseFloat(amount).toFixed(2);
return amount;
}
function trainthetrainerForm_displayTotalAmount() {
var amount = trainthetrainerForm_calculateItemAmount();
console.log(parseFloat(amount));
var totalamount = parseFloat(amount)+((parseFloat(amount)*0.029888888888889)+0.30);
console.log(totalamount);
totalamount = parseFloat(totalamount).toFixed(2);
console.log(totalamount);
$('#paypal_submit_form input[name=tmp_total_amount]').val(totalamount);
}
function submitTrainthetrainerForm() {
var qty = $('#paypal_submit_form select[name=number_of_members]').val();
$('#paypal_submit_form input[name=quantity_1]').val(qty);
var totalAmount = 0;
var amount = trainthetrainerForm_calculateItemAmount();
var processingFee = trainthetrainerForm_calculateFee();
totalAmount = amount + processingFee;
$('#paypal_submit_form input[name=business]').val('shana@same.org');
$('#paypal_submit_form input[name=amount]').val(totalAmount);
$('#paypal_submit_form input[name=amount_2]').val(processingFee);
$('#paypal_submit_form').submit();
}
$(document).ready(function() {
$(document).on('change', $("#bal_number_of_members"), function() {
trainthetrainerForm_displayTotalAmount();
});
$("#bal_submit_btn").click(function() {
submitTrainthetrainerForm();
});
// trainthetrainerForm_displayTotalAmount();
});
</script>
一个有效的小提琴
更新
我发现输入的name="amount_1" value="90" 并没有变成等价的金额
var amount = trainthetrainerForm_calculateItemAmount();
里面
submitTrainthetrainerForm()
功能
表单操作
action="https://www.paypal.com/cgi-bin/webscr"
对此有什么想法吗?
更新
好的,我想我几乎解决了这个问题。#cat-loto 和 #cat-aerial 值已经发送到 paypal,但是如果我从 select #bal_number_of_members 中选择 2、3、4、5,之前的值将是乘以 select #bal_number_of_members.Example,如果我为 cat-loto 选择 1,它将发送正确的数字,即 51.79,但是如果我更改并为 #bal_number_of_members 选择 2,则 103.59 的 tmp_value 将乘以2,它会向贝宝发送 103.59 乘以 2 的值,应该是 103.59。
我根据用户 Alain Nisam 的回答更新了 Javascript 文件
js文件
<script>
function getPayPalProcessingFee() {
var qty = $('#paypal_submit_form select[name=number_of_members]').val();
qty = parseInt(qty);
var current_index = $("input[name=cat]:checked").attr('id');
switch (current_index){
case 'cat-both':
return 3*qty;
break;
case 'cat-aerial':
return 1.8*qty;
break;
case 'cat-loto':
return 1.8*qty;
break;
default:
return 0;
}
}
function trainthetrainerForm_calculateFee() {
var fee = getPayPalProcessingFee();
return fee;
}
function trainthetrainerForm_calculateItemAmount() {
var qty = jQuery('#paypal_submit_form select[name=number_of_members]').val();
var current_val = jQuery("input[name=cat]:checked").val();
//console.log(current_val);
var amount = parseInt(qty) * current_val;
amount = parseFloat(amount).toFixed(2);
return amount;
}
function trainthetrainerForm_displayTotalAmount() {
var amount = trainthetrainerForm_calculateItemAmount();
console.log(parseFloat(amount));
var totalamount = parseFloat(amount)+ ((parseFloat(amount)*0.029888888888889)+0.30);
console.log(totalamount);
totalamount = parseFloat(totalamount).toFixed(2);
console.log(totalamount);
jQuery('#paypal_submit_form input[name=tmp_total_amount]').val(totalamount);
}
function submitTrainthetrainerForm() {
var qty = jQuery('#paypal_submit_form select[name=number_of_members]').val();
jQuery('#paypal_submit_form input[name=quantity_1]').val(qty);
var totalAmount = 0;
var amount = trainthetrainerForm_calculateItemAmount();
var processingFee = trainthetrainerForm_calculateFee();
totalAmount = amount + processingFee;
jQuery('#paypal_submit_form input[name=business]').val('shana@same.org');
jQuery('#paypal_submit_form input[name=amount]').val(totalAmount);
jQuery('#paypal_submit_form input[name=amount_2]').val(processingFee);
jQuery('#paypal_submit_form').submit();
return true;
}
jQuery(document).ready(function() {
$(document).on('change', $("#bal_number_of_members"), function() {
trainthetrainerForm_displayTotalAmount();
});
jQuery("#bal_submit_btn").click(function() {
submitTrainthetrainerForm();
});
$(document).on('change',$('input[name="tmp_total_amount"]'),function(){
$('input[name="amount_1"]').val($('input[name="tmp_total_amount"]').val());
trainthetrainerForm_displayTotalAmount();
});
});
【问题讨论】:
-
我只看到一个按钮,其他两个呢?
-
@terrymorse,我的意思是 input type="radio"
-
@Alain Nisam,我发现这里的错误在于输入 name="amount_1" value="90"。看来这需要更改 var amount = 的值trainthetrainerForm_calculateItemAmount();在 submitTrainthetraineForm() 函数内部。有什么想法吗?
-
@DanielleRoseMabunga - 您可以将所需的值写入隐藏表单字段,如下所示:$('input[name="amount_1"]').val(theNewAmount)
标签: javascript paypal