尝试使用JavaScript解析将值应用于隐藏的输入变量

时间:2017-05-17 04:19:03

标签: javascript php forms paypal

我使用JavaScript函数获取发布金额。我可以获得amount的唯一方法是从表单中解析item_name输入变量。它适用于Chrome,而不适用于IE。顺便说一句,它使用PHP和MySQL挂钩到PayPal。



function ReadForm(obj1) {
  var holeObjectValue = obj1.item_name.value;
  var splitFields = holeObjectValue.split("$");
  obj1.amount.value = splitFields[1];
}

<form action="" method="post" name="form1" target="_self">
  <input name="item_name" type="radio" onclick="ReadForm(this.form, false);" value="Please Select from above $ 100" checked="checked" />Please Select from above $ 100<br />
  <input name="item_name" type="radio" onclick="ReadForm(this.form, false);" value="Please Select from above $ 200" checked="checked" />Please Select from above $ 200<br />
  <input name="amount" type="hidden" value="" />
  <input type="submit" value="submit" />
</form>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:0)

将您的代码更改为此代码,它也适用于IE:

HTML:

<form action="" method="post" name="form1" target="_self">
<input id="item100" name="item_name"  type="radio" onclick="ReadForm();" 
value="100"  checked="checked" />Please Select from above $ 100<br />
<input id="item200" name="item_name"  type="radio" onclick="ReadForm();" 
value="200"  checked="checked" />Please Select from above $ 200<br />
<input name="amount" type="hidden" value="" />
<input  type="submit" value="submit" />
</form>

Javascript:

function ReadForm() {    
   var selectedValue = 0;
   if(document.getElementById('item100').checked) 
        selectedValue = document.getElementById('item100').value;
   if(document.getElementById('item200').checked) 
        selectedValue = document.getElementById('item200').value;
   console.log(selectedValue);           
}

https://jsfiddle.net/emilvr/v32e6vc8/

答案 1 :(得分:0)

表单正在运行。但是在页面源中,无法看到分配给变量的值。 如果您在分配前parseInt(splitFields[1]),那将会很好。

检查以下代码。我将方法更改为GETaction="xyz.php"(Somefile)。 当您点击Submit时,您会在浏览器的网址框中看到GET请求的参数。正在设置隐藏值。

<form action="xyz.php" method="get" name="form1" target="_self">
<input name="item_name"  type="radio" onclick="ReadForm(this.form, false);" value="Please Select from above $ 100"  checked="checked" />Please Select from above $ 100<br />
<input name="item_name"  type="radio" onclick="ReadForm(this.form, false);" value="Please Select from above $ 200"  checked="checked" />Please Select from above $ 200<br />
<input name="amount" type="hidden" value="" />
<input  type="submit" value="submit" />
</form>

我希望这可以帮到你!

答案 2 :(得分:0)

有一些事情出了问题。在:

  var holeObjectValue = obj1.item_name.value; 

因为有两个具有相同名称的单选按钮,它返回一个没有 vlaue 属性的NodeList。要获取所选无线电的值,您可以循环播放无线电或使用选择器:

var selected = obj1.querySelector('input[name=item_name]:checked');

在您的标记中,您已选中了两个单选按钮。单选按钮的性质一次只能检查一个,因此从其中一个中删除已检查的属性。

最后,您不需要解析该值以获得您想要的值,因此请将值设置为“200”或其他值,例如

<input name="item_name"  type="radio" onclick="ReadForm(this.form, false);"
  value="200">Please Select from above $ 200<br>

但是,许多正在使用的浏览器不支持这种复杂的选择器,因此循环解决方案更兼容(并且编写起来不多),所以:

function ReadForm(obj1) {
  var radios = obj1.item_name;
  var holeObjectValue = null;

  for (var i = 0, iLen = radios.length; i < iLen; i++) {
    if (radios[i].checked) {
      holeObjectValue = radios[i].value;
      break;
    }
  }

  if (!holeObjectValue) return;
  obj1.amount.value = holeObjectValue;
}
<form action="" method="post" name="form1" target="_self" 
  onsubmit="return false"> <!-- prevent submit for testing -->
  <input name="item_name" type="radio" onclick="ReadForm(this.form, false);"
   value="100" checked>Please Select from above $ 100<br>
  <input name="item_name" type="radio" onclick="ReadForm(this.form, false);"
   value="200" >Please Select from above $ 200<br>
  <input name="amount" value=""> <!-- show for testing -->
  <input type="submit">
</form>

您遇到的最后一个问题是默认选择了一个广播,但如果用户未点击广播,则该值不会写入金额字段。我会留给你解决。