2013-05-14 29 views
0

我有一系列的文本框的名称相同的值我怎样才能从相同ID的一系列文本框的

<%for(i=0;i<=nooftasks;i++){%> 
<input type="text" id="duration" 
name="duration" class="td4" onkeyup="durationFormat()"> 
}%> 

在javascript中我有两个数字

function durationFormat() 
{ 
    var duration = document.getElementsByName("duration").value; 
    if(duration.length==2){ 
     duration=duration+":"; 
    } 
} 
后加冒号

但是我无法得到想要的结果,因为我无法从该特定文本框的textbox中获取字符串。

任何想法?

+0

是的,第一个想法是,你使用相同的'id'为不同的属性,这会给你一些错误。首先,改变这一点。 – DaGLiMiOuX 2013-05-14 11:31:57

+0

我认为这可能是拼写错误,但拼写错误''长度' – 2013-05-14 11:32:08

+0

具有相同'name'的多个元素很好,但是'id'应该是唯一的或者省略。 – nnnnnn 2013-05-14 11:35:26

回答

2
<input type="text" id="duration" name="duration" class="td4" onkeyup="durationFormat(this)"> 
<script> 
function durationFormat(obj) { 
    if ((obj.value.length)== 2) { 
     obj.value+=":"; 
    } 

} 
</script> 
2

getElementsByName返回一个节点列表不是元素。 NodeList就像一个Array。您需要对其进行循环,然后依次将更改应用于每个值。

即使您已经使用getElementById(它返回一个元素)并为您的输入拥有唯一的ID(您没有,这是无效的,修复它),那么它仍然不会修改该值。将value属性复制到变量中,然后对其进行修改将不会更改输入的value属性。你需要回去,然后input.value = duration做出修改后。


如果你想调用该函数,那么具体输入:

  1. 停止使用固有的事件属性。他们是一个痛苦
  2. 使用addEventListener代替
  3. 使用事件代表团来简化处理程序
  4. 的安装检查目标属性,以确定哪个输入被调用

例如:

<fieldset id="durations"> 
<legend>Durations</legend> 
<%for(i=0;i<=nooftasks;i++){%> 
<input type="text" name="duration" class="td4"> 
}%> 
</fieldset> 

<script> 
    function durationFormat(ev) { 
     var input = ev.target; 
     if (input.value.length === 2) { 
      input.value += ":"; 
     } 
    } 
    document.getElementById('durations').addEventListener('keyup', durationFormat); 
</script> 
+0

尽管如果我使用document.getElementById我无法获得该特定文本框的值,该值调用函数 – Bhaskar 2013-05-14 11:35:00

+0

感谢您的建议,如果有任何其他方式确定获取该特定文本框的值(不更改id的文本框) – Bhaskar 2013-05-14 11:39:11

+0

现场示例:http://jsbin.com/etafot/1/edit – Quentin 2013-05-14 11:40:38

1

你必须循环到名称为duration的元素。

function durationFormat() { 
    var duration = document.getElementsByName("duration"); 

    for (var i = 0; i < duration.length; i++) { 
     if(duration[i].value == 2){ 
      duration[i].value += ":"; 
     } 
    } 
} 

的逻辑是这样的:

  • 首先,获取与该物业duration值的属性名称的所有elements
  • 其次,您必须在调用.getElementsByName方法时获得的元素数组中循环。
  • 要完成,你必须在值的末尾,如果他的价值是2设置每个元件与:值。

对于那些不明白duration[i].value += ":";呢,会自动在阵列的i位置获取输入元素的值,并在年底增加值:。如果你这样做duration[i].value = duration[i].value + ":";完全一样。我更喜欢使用+=,因为它是分拣机。我从未测试过,但我认为这也是浏览器在最后添加一些内容的最快方式。它也可以用于字符串变量。

+1

也请根据'stackoverflow'建议说明您的逻辑 – 2013-05-14 11:37:05