提交时Javascript更改隐藏字段

提交时Javascript更改隐藏字段,javascript,forms,Javascript,Forms,您好,我正在尝试在我的网站上安装一个商户设施,它需要提交价值$vpc_的金额,即以美分购买的金额 我需要做的是将用户输入的金额$amount乘以100,得到$vpc\U金额 我尝试了以下方法,但不起作用 <input type="text" ID="A1" name="amount"onkeypress="process1()"> <input type="hidden" id="A2" name="vpc_Amount"> 现在发生的是,它偶尔会起作用,但大多数时候不

您好,我正在尝试在我的网站上安装一个商户设施,它需要提交价值$vpc_的金额,即以美分购买的金额

我需要做的是将用户输入的金额$amount乘以100,得到$vpc\U金额

我尝试了以下方法,但不起作用

<input type="text" ID="A1" name="amount"onkeypress="process1()">
<input type="hidden" id="A2" name="vpc_Amount">
现在发生的是,它偶尔会起作用,但大多数时候不会。我知道脚本有问题,因此在这里询问。

使用Jquery


您是否尝试使用onkeyup事件?可能是在字符添加到文本字段之前触发onkeypress事件

<input type="text" ID="A1" name="amount" onkeyup="process1()">
此外,我建议您尝试将textfield的值转换为整数,并添加其他输入处理。用户可能在那里输入任何类型的数据,这可能会使您的javascript代码崩溃。

尝试使用onkeyup函数-

<input type="text" id="A1" name="amount" value="" onkeyup="process1();" />
<input type="hidden" id="A2" name="vpc_Amount" />
此代码应适用于:

document
  .getElementById('A1')
  .addEventListener('keyup', function (e) {
    document.getElementById('A2').value = parseInt(this.value) * 1000;
  })
在文本字段中的值更改之前触发keypress事件,在值更改之后触发keyup事件

基本上,事件触发顺序如下:

按键按下 按键 键控键控键控键控键控
强制值为整数,否则在某些情况下会得到NaN。

我建议使用onblur,如果您不使用jquery,那么这是使用内置属性侦听器的最佳方法。下面是一个例子:

  <!DOCTYPE html>
  <html>
  <body>

  Enter your name: <input type="text" id="fname" onblur="myFunction()">

  <p>When you leave the input field, a function is triggered which transforms the input             text to upper case.</p>

  <script>
  function myFunction() {
      var x = document.getElementById("fname");
      x.value = x.value.toUpperCase();
  }
  </script>

  </body>
  </html>

w3学校的例子的url:

首先,我认为应该使用onkeypup事件,而不是onkeypress

<input type="text" id="A1" name="amount" onkeyup="process1()" value="" />
<input type="hidden" id="A2" name="vpc_Amount" value="" />
jQuery代码,用于相同的-

jQuery(document).ready(function($){
    $("#A1").keyup(function(){
     var total = parseFloat($("#A1").val()) * 100;
    $("#A2").val(total);
  });
});

您的代码可以通过利用以下事实来简化:表单控件可以作为表单名称上的命名属性使用。这消除了向表单控件添加ID的要求,这些控件无论如何都必须有名称

将引用传递给侦听器中的控件:

<input type="text" name="amount" onkeyup="process1(this)">
<input type="hidden" name="vpc_Amount">
您可能希望改为使用更改事件来保存用户键入时不必要地更新隐藏字段,并捕获不基于按键的更改,例如从上下文菜单粘贴


您还应该对输入的值进行一些验证,这样用户就不会试图发送带有无效值的表单。请注意,您还必须在服务器上进行验证,因为客户端验证很有用,但完全不可靠。

您偶尔是什么意思?对我来说似乎没问题,除非你输入一个非数字,如果你想提交vpc_金额的值,这取决于你不需要监听按键事件的金额。改为收听Submit event,并在那里设置vpc_Amount值。根据帖子或标签中未提及的库发布答案是吸引反对票的好方法。欢迎。您需要批准答案,然后:
<input type="text" id="A1" name="amount" onkeyup="process1()" value="" />
<input type="hidden" id="A2" name="vpc_Amount" value="" />
function process1() {
    var f1 = parseFloat(document.getElementById("A1").value);
    var total = f1*100; //you said 100 so, I changed to 100
    document.getElementById("A2").value = total;
}
jQuery(document).ready(function($){
    $("#A1").keyup(function(){
     var total = parseFloat($("#A1").val()) * 100;
    $("#A2").val(total);
  });
});
<input type="text" name="amount" onkeyup="process1(this)">
<input type="hidden" name="vpc_Amount">
function process1(element) {
    element.form.vpc_Amount.value = element.value * 100;
}