返回HTML FORM变量名称(非值)

时间:2012-09-28 00:24:58

标签: javascript getelementsbyname

这可能是一个非常简单的问题,但我似乎无法做到这一点。

是否可以从FORM中提取变量“name”?我有以下下拉菜单(简体)......

<FORM NAME="doc_select">
    <SELECT ID="rec_list"  NAME="rec_info"><OPTION>...</OPTION></SELECT>
    <SELECT ID="term_list" NAME="term_info"><OPTION>...</OPTION></SELECT>
    <SELECT ID="comp_list" NAME="comp_info"><OPTION>...</OPTION></SELECT>
</FORM>

这些都通过“onChange”语句触发了一些java脚本。到目前为止一切都很好。

我想提取名称,而不是值,然后使用提取的名称 像下面这样的java脚本语句:

var info = form.*name*.value; 

getElementsByName给我的价值不是名字。

有什么想法吗?

干杯 弗兰克

4 个答案:

答案 0 :(得分:1)

也许这段代码可以帮到你。 Check out a demo of this here.

form = document.doc_select;

document.getElementById('rec_list').onchange = function() {
    n = this.name;

    var info = form.elements[n].value;
    console.log('name: ' + n);          //name: rec_info
    console.log('info: ' + info);       //info: 2
};​

使用.name获取元素的名称。 elements[]函数根据名称或索引返回元素。例如elements[0]也会给出相同的结果,但由于你不知道索引,它对你没有好处。

<小时/> 的更新

在阅读你的评论后,关于只管理一个脚本,我想我已经理解了你的问题。只需对代码进行一些小调整,这应该是您正在寻找的内容:

form = document.doc_select;

document.getElementById('rec_list').onchange = function() {
    onChangeFunction(this.name);
};
document.getElementById('term_list').onchange = function() {
    onChangeFunction(this.name);
};
document.getElementById('comp_list').onchange = function() {
    onChangeFunction(this.name);
};

function onChangeFunction(name){
    //...your code goes here...

    var info = form.elements[name].value;
    console.log('name: ' + name);         //outputs name of element that changed
    console.log('info: ' + info);         //outputs value for that element

    //...more of your code...
}

每个<select>元素不再需要3个不同的函数。 :) Check it out here.

答案 1 :(得分:0)

当您使用getElementsByName时,您只需要询问具有该name属性的HTMLElement。你需要的是从HTMLElement获取属性“name”。如果你能够使用jQuery,你可以使用jQuery .attr()函数。

编辑:查看此StackOverflow问题Get elements by attribute when querySelectorAll is not available without using libraries?

答案 2 :(得分:0)

试试这个...... ` var rec_list = document.querySelector(“#rec_list”);

警报(rec_list.name); `

答案 3 :(得分:0)

我不清楚你的问题是什么,所以这里有一些一般的东西。要获取调用侦听器的元素的名称,请传递this

<select id="rec_list"  name="rec_info" onchange="someFn(this)" ... >

您可以使用动态添加的侦听器执行相同操作。在函数中:

function someFn(element) {
  var elementName = element.name;
  var theForm = element.form;
  var theValue = element.value;

  // and so on ...

}

您还可以使用其名称访问表单控件作为表单的属性,因此一旦您引用了表单:

form.comp_info

是OP中的第三个选择元素。请注意,在此特定情况下,如果有一个具有该名称的控件,则返回对该元素的引用。如果有多个具有相同名称的控件,则返回一个集合。另请注意,IE会混淆name和id标记,因此永远不要对一个控件的名称和另一个控件的id使用相同的值。

getElementsByName方法返回一个集合,成员可以通过索引访问,所以第一个是:

var someElement = document.getElementsByName('foo')[0];

请注意,如果没有名称为“foo”的元素,则someElement的值为undefined