我有一个包含十几个文本字段元素的表单。任何值的更改都应执行Javascript函数。直到现在我才知道我将要做什么,但我无法检测触发函数的文本字段索引。我尝试了一些我在这里看到的解决方案&那里但没有成功。
<form action="" method="post" enctype="multipart/form-data" name="myforma1" target="_self" id="myforma1">
<input name="txtfield" type="text" id="txtfield" onchange="detect_it(this);" value="name of person" size="20" maxlength="25" />
<input name="txtfield" type="text" id="txtfield" onchange="detect_it(this);" value="name of person" size="20" maxlength="25" />
<input name="txtfield" type="text" id="txtfield" onchange="detect_it(this);" value="name of person" size="20" maxlength="25" />
...
<script>
function detect_it(oo)
{
alert('Index of triggered element is: ' + oo.index);
/* rest of code */
}
</script>
答案 0 :(得分:1)
您可能不应该为所有输入提供相同的名称和ID。
但是,您仍然可以查找父节点,然后遍历父节点的子节点,直到找到您的节点来检索其索引。
试试这个getIndex()函数:
<script>
var getIndex = function (node) {
for (var i =0;i<node.parentNode.children.length;i++) {
if (node.parentNode.children[i] === node) {
return i;
}
}
}
function detect_it(oo) {
alert('Index of triggered element is: ' + getIndex(oo));
}
</script>
请参阅此小提琴:http://jsfiddle.net/LkJxV/
编辑:更正的代码(再次)(thx @Felix)
答案 1 :(得分:0)
这里的问题是索引不是元素的属性。它可以根据上下文有不同的索引,但你可以尝试 尝试类似:
function detect_it(oo){
var inputs = document.getElementsByTagName('input')
for (var i = 0 ; i<inputs.length ; i++){
if(oo == inputs[i]{
alert('Index of triggered element is: ' + i);
}
}
//enter code here
}