【问题标题】:Javascript form submit data not changing when submitting to Paypal提交到Paypal时,Javascript表单提交数据不变
【发布时间】: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 &amp; 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&amp;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>

一个有效的小提琴

fiddle

更新

我发现输入的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


【解决方案1】:

好的 Danielle,这是我的最后一个答案 - 我唯一不确定的项目是“quantity_2”。它设置为 1,我不确定它的含义。

<script type="text/javascript" src="https://code.jquery.com/jquery-2.2.0.min.js"></script>

<h2 class="contentheading" style="margin-top: 0px;">2016 “Train-The-Trainer” Workshops<br /><br /> AERIAL</h2>
<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/***" 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" value="shana@same.org" />
        <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 &amp; 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&amp;id=278" />
        <input name="no_shipping" type="hidden" value="1" />
    </form>
</div>
<div style="font-size: 11px; margin-top: 10px; color: red;">
    Additional 2.9% + $0.30 processing fee will be charged with all orders paid by credit card.
</div>
<div style="margin-top: 50px;">
    <a style="font-size: 18px;" href="images/Flyer_2016.pdf" target="_blank">Download Order Form</a>
</div>
<p style="font-size: 14px;">
    <strong>Please fax or email the order form to the office.</strong>
</p>


<script type="text/javascript">
$('#bal_submit_btn').on('click',function(e){
  //Remove this in production and the form will continue to submit
  e.preventDefault();
  var theFee = getFee();
  var thePrice = getPrice();
  $('#paypal_submit_form input[name=business]').val('shana@same.org');
  $('#paypal_submit_form input[name=amount]').val(thePrice);
  $('#paypal_submit_form input[name=amount_2]').val(theFee);

  console.log( $('#paypal_submit_form').serializeObject() );
  return false;
})

$(document).on('change', $("#bal_number_of_members"), function(e) {
  return update();
});

function update(){
    var qty = $('#bal_number_of_members').val();
    var theFee = getFee();
    var thePrice = getPrice();
    var total = parseFloat(thePrice + theFee);
    $('#paypal_submit_form input[name=tmp_total_amount]').val(total);
    $('#paypal_submit_form input[name="amount_1"]').val(total);
    $('#paypal_submit_form input[name="amount"]').val(total);
    $('#paypal_submit_form input[name="amount_2"]').val(theFee);
    $('#paypal_submit_form input[name=quantity_1]').val(qty);
    return Math.round(total * 100)/100;
}

function getPrice() {
  var qty = $('#bal_number_of_members').val();
  var pricePerUnit = $("input[name=cat]:checked").val();
  var price = pricePerUnit * qty;
  return Math.round(price *100)/100;
}

function getFee() {
  var qty = $('#bal_number_of_members').val();
  var pricePerUnit = $("input[name=cat]:checked").val();
  var price = pricePerUnit * qty;
  var theFee = Math.round( ((price*0.029888888888889)+0.30) * 100)/100;
  return theFee;
}

$(document).ready(function() {
    return update();
});

$.fn.serializeObject = function(){
        var o = {};
        var a = this.serializeArray();
        $.each(a, function() {
                if (o[this.name] !== undefined) {
                        if (!o[this.name].push) {
                                o[this.name] = [o[this.name]];
                        }
                        o[this.name].push(this.value || '');
                } else {
                        o[this.name] = this.value || '';
                }
        });
        return o;
};
</script>

【讨论】:

    【解决方案2】:

    更新为使用正确的字段:

    <script type="text/javascript" src="https://code.jquery.com/jquery-2.2.0.min.js"></script>
    
    <h2 class="contentheading" style="margin-top: 0px;">2016 “Train-The-Trainer” Workshops<br /><br /> AERIAL</h2>
    <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/***" 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 &amp; 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&amp;id=278" />
        <input name="no_shipping" type="hidden" value="1" />
      </form>
    </div>
    <div style="font-size: 11px; margin-top: 10px; color: red;">
      Additional 2.9% + $0.30 processing fee will be charged with all orders paid by credit card.
    </div>
    <div style="margin-top: 50px;">
      <a style="font-size: 18px;" href="images/Flyer_2016.pdf" target="_blank">Download Order Form</a>
    </div>
    <p style="font-size: 14px;">
      <strong>Please fax or email the order form to the office.</strong>
    </p>
    
    
    <script type="text/javascript">
      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);
        $('input[name="amount_1"]').val(totalamount);
      }
    
      function trainthetrainerForm_calculateFee() {
        var amount = trainthetrainerForm_calculateItemAmount();
        return (parseFloat(amount)*0.029888888888889)+0.30;
      }
    
      function submitTrainthetrainerForm(e) {
        e.preventDefault();
        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);
    
    console.log( $('form').serializeObject() );
    return false;
    
        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(e) {
          submitTrainthetrainerForm(e);
        });
    
        trainthetrainerForm_displayTotalAmount();
      });
    
     $.fn.serializeObject = function()
    {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function() {
            if (o[this.name] !== undefined) {
                if (!o[this.name].push) {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
    }; 
    </script>
    

    【讨论】:

    • 仍然是#cat-both 的值发送而不是#cat-aerial, #cat-loto
    • 好的,我编辑了我的最后一个答案,这样当您提交时,它会转储所有字段。我认为比较实际发布的内容会很有帮助。
    • 已经这样做了。在开发人员控制台中,console.log 所有正确的值都是正确的。但是我很困惑为什么它在发送到贝宝时没有发送正确的值
    • 使用您的代码,当我为 cat-loto 或 cat-aerial 选择 1 时,问题出在 amount_1。但是当我在下拉列表中选择 2 或其他数字时,number_1 转储正确的值
    • 这段代码 $(document).on('change',$('input[name="tmp_total_amount"]'),function(){ $('input[name="amount_1"] ').val($('input[name="tmp_total_amount"]').val()) }) 不会改变值。
    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2016-12-04
    • 2016-09-26
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多