当文本框名称包含方括号时,Javascript不起作用

时间:2011-06-03 12:47:00

标签: php javascript

我有这个用于计算方形区域的脚本,它完美无缺:

<script language="javascript" type="text/javascript">
function startCalc(){
  interval = setInterval("calc()",1);
}
function calc(){
  one = document.autoSumForm.firstBox.value;
  two = document.autoSumForm.secondBox.value; 
  document.autoSumForm.Area.value = (one * 1) * (two * 1);
}
function stopCalc(){
  clearInterval(interval);
}
</script>

<form name="autoSumForm">
<input  size="3"  type=text name="firstBox" value="" onFocus="startCalc();" onBlur="stopCalc();">
<input  size="3"  type=text name="secondBox" value="" onFocus="startCalc();" onBlur="stopCalc();">
<input  size="4"  type=text name="Area" readonly="true">
</form>

但我的问题是我需要第三个方框的名称为 Area[<?php echo $area['area_id']; ?>]

但是当我在名字中使用括号时,我无法使javascript工作。

4 个答案:

答案 0 :(得分:5)

请注意,如果您不需要括号,则不应添加括号!这使得它不必复杂。

在您发布的代码中,没有迹象表明您需要这些括号。如果您有多个具有相同名称的输入字段并且希望PHP创建数组,则通常会添加它们。有关详细信息,请参阅Variables From External Sources

如果您需要它们,您必须使用括号表示法访问该字段:

document.autoSumForm['Area[<?php echo $area["area_id"]; ?>]'].value = (one * 1) * (two * 1);

另外我建议不要在字段名称的括号内传递值。这会将您的代码简化为:

<input  size="4"  type=text name="Area[]" readonly="true">

document.autoSumForm['Area[]'].value = (one * 1) * (two * 1);
然后,PHP将创建一个包含从0开始的连续数字键的数组。

答案 1 :(得分:2)

虽然Felix的答案适用于大多数(所有?)浏览器,但应注意HTML名称和ID应该是有效的标识符,不能包含方括号。正确的解决方案是不要在名称和ID中使用方括号。

编辑:我的立场得到了纠正。在HTML 4中,'id'属性是类型ID,但表单元素的'name'属性是CDATA类型,因此几乎可以包含任何内容。见http://www.w3.org/TR/html4/index/attributes.html

我可能正在考虑meta'name',它是NAME类型。

答案 2 :(得分:2)

  1. 将id添加到textarea

    <input size="4" type=text name="Area" id="someid" readonly="true">

  2. 按ID列出值

    document.getElementById('someid').value = (one * 1) * (two * 1);

答案 3 :(得分:0)

我会在第三个框(第三个输入)中添加一个'id'属性,并为id赋予一个没有方括号的值。

使用'id'属性在javascript代码中选择DOM元素。让'name'属性保持方括号。