2

我在任何地方都没有找到这个问题,所以我把它贴在这里。

我有一堆使用 VBScript 部分命名的选择标签。我希望能够获取从 javascript 中的 onchange 事件调用的选择标记的名称。

这是代码。

<select name="optWeeks_<%=intLineCnt%>" id = "name" onchange="changeWeek()">
       <option value=""></option>
          <option value="1">1</option>
          <option value="2">2</option>
</select>


<SCRIPT LANGUAGE = "JavaScript">

function changeWeek(){
var chosenoption = document.getElementsByTagName("select").name

}
</SCRIPT>

选择名称 -"optWeeks_<%=intLineCnt%>"是以数字为前缀的 optWeeks

我想知道我是否可以获得被调用的选择标签的每个名称?前任。optWeeks_1、optWeeks_2 等。

4

4 回答 4

2

将调用更改为:

...  onchange="changeWeek(this);">

然后你可以简单地;

function changeWeek(caller) {
   var chosenoption = caller.name;
}
于 2013-08-02T15:24:58.777 回答
1

您需要获取对该元素的引用。this将是您的事件处理函数中的一个。您可以将它传递给您从那里调用的函数:

onchange="var element = this; changeWeek(element)">

为了清楚起见,我在上面包含了变量分配,您不需要它:

onchange="changeWeek(this)">

然后,您可以从该name对象的属性中获取名称:

function changeWeek(element) {
    var name = element.name;

我通常建议使用 JS 而不是 HTML 绑定事件处理程序,但不要使用 HTML 3.2:

<select name="optWeeks_<%=intLineCnt%>" id="name">
    <!-- … -->
</select>

<script>
var select = document.getElementById('name');
select.addEventListener('change', changeWeek);
function changeWeek(evt) {
    var name = this.name;
}
</script>
于 2013-08-02T15:25:21.093 回答
0

或者您可以使用:

onchange="changeWeek(this.name)"

或者:(请记住,changeWeek 函数必须已经定义)

    <script>
      var select = document.getElementById('name');
      select.onchange = changeWeek;
    </script>

addEventListener vs onclick——关于添加事件监听器和我上面提供的方法之间的信息。

于 2013-08-02T15:39:53.313 回答
0

另一种 JavaScript 方式:

var selects = document.getElementsByTagName('select');

for(var i in selects)
{
    selects[i].onchange = function changeWeek(e) {console.log(e.target.name);}
}

HTML:

<select name="test">
    <option>One</option>
    <option>Two</option>
</select>
<select name="test2">
    <option>One</option>
    <option>Two</option>
</select>

小提琴:

http://jsfiddle.net/bddwW/

于 2013-08-02T15:53:32.757 回答