1

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

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

<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-script 语句中使用提取的名称,如下所示:

var info = form.*name*.value; 

getElementsByName给我价值而不是名字。

有任何想法吗?

干杯弗兰克

4

4 回答 4

1

也许这段代码会对你有所帮助。在这里查看一个演示。

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 个不同的功能。:)在这里查看。 ​</p>

于 2012-09-28T01:16:45.263 回答
0

当您使用 getElementsByName 时,您只是在请求具有该名称属性的 HTMLElement。您需要的是从 HTMLElement 中获取属性“名称”。如果您能够使用 jQuery,则可以使用 jQuery .attr() 函数。

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

于 2012-09-28T00:30:39.360 回答
0

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

警报(rec_list.name);`

于 2012-09-28T00:35:07.517 回答
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 混淆了名称和 id 标记,因此切勿对一个控件的名称和另一个控件的 id 使用相同的值。

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

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

请注意,如果没有名称为 'foo' 的元素,则someElement其值为undefined.

于 2012-09-28T01:02:44.220 回答