2012-08-02 54 views
0

我有一个代码,它使用户能够在第一个文本框中输入一个值,并且我希望它在具有相同ID的其他TextFields中填充相同的值。 (有一个列中有9个文本区域具有相同的ID)onKeyUp Texftield自动生成。 HTML/JAVA

这是我的代码,但问题是值只在第一个收件箱(TextF1)中填充并且其他任何事情都没有发生。有没有人看到问题在这里

<form > 
<input type='text' id='VarField' onKeyUp="document.getElementById('VarField1').value=this.value" value='' size="10"> 

<input type='text' name='TextF1' id='VarField1' value='' size="10"> 
<input type='text' name='TextF2' id='VarField1' value='' size="10"> 
<input type='text' name='TextF3' id='VarField1' value='' size="10"> 
. 
. 
. 
<input type='text' name='TextF8' id='VarField1' value='' size="10"> 
<input type='text' name='TextF9' id='VarField1' value='' size="10"> 
</form> 

回答

0

这是不好的做法,具有相同ID不止一个标签 - 正因为如此,该getElementById方法只访问与该ID的第一个标签。相反,给每个输入相同的类,选择所有的输入,并遍历它们。

所以您的代码会是这个样子(我分开的onkeyup事件的功能,使其更容易看到):

<script type="text/javascript"> 
    function writeText() 
    { 
     var textFields = document.getElementsByClassName("VarField1"); 
     for(i = 0; i < textFields.length; i++) 
     { 
      textFields[i].value = document.getElementById("VarField").value; 
     } 
    } 
</script> 

<form > 
    <input type='text' id='VarField' onKeyUp="writeText()" value='' size="10"> 

    <input type='text' name='TextF1' class='VarField1' value='' size="10"> 
    <input type='text' name='TextF2' class='VarField1' value='' size="10"> 
    <input type='text' name='TextF3' class='VarField1' value='' size="10"> 
    <input type='text' name='TextF8' class='VarField1' value='' size="10"> 
    <input type='text' name='TextF9' class='VarField1' value='' size="10"> 
</form> 

请注意,您必须通过这种方式循环 - 虽然这是很有诱惑力的使用foreach(for ... in)循环,这对于getElementsByClassName返回的NodeList不起作用。

+0

非常非常感谢。解决了这个问题 – 2012-08-03 00:17:03

1

HTML元素的ID应该是唯一的。我的意思是,只有一个元素应该具有ID VarField1。

您可以改为给每个元素使用相同的VarField1类。然后你可以使用for-each循环为每个元素赋予适当的值。这看起来是这样的:

function assignValue(textValue) 
{ 
    for (textBox in document.getElementsByClassName("VarField1")) 
    { 
     textBox.value = textValue; 
    } 
} 

你onKeyUp属性只会用文本框的值调用assignVale()函数。

onKeyUp="assignValue(this.value)"

0

我相信这个问题是,您不能在具有相同ID的页面上拥有多个控件/元素。尝试给他们不同的ID(例如Varfield2,Varfield2等)。这应该可以解决问题。