无法从事件处理程序“this”对象获取属性

时间:2013-03-22 02:30:14

标签: javascript jquery

<select onchange="alert($(this).attr('data-type'))">
    <option data-type="1" value="a">a</option>
    <option data-type="2" value="b">b</option>
</select>

当我在jsfiddle上运行时,我得到null。有什么想法吗?

这是js小提琴:

http://jsfiddle.net/49wyG/

谢谢!

4 个答案:

答案 0 :(得分:5)

你必须抓住元素的选定索引并从那里开始,试试这个:

<select onchange="alert(this.options[this.selectedIndex].getAttribute('data-type'));">
    <option data-type="1" value="a">a</option>
    <option data-type="2" value="b">b</option>
</select>

我的工作很好。

答案 1 :(得分:2)

data-type属性位于选项元素而非select。我假设你想要当前选择的数据类型

<select onchange="alert($(this).find(':selected').attr('data-type'))">
    <option data-type="1" value="a">a</option>
    <option data-type="2" value="b">b</option>
</select>

http://jsfiddle.net/49wyG/4/

答案 2 :(得分:1)

this是指select而不是option。试试这个:

<select>
    <option data-type="1" value="a" onclick="alert($(this).attr('data-type'))">a</option>
    <option data-type="2" value="b" onclick="alert($(this).attr('data-type'))">b</option>
</select>

或者,您可以使用:selected选择器或this.selectedIndex来抓取option。像这样:

<select onchange="alert($(':selected',this).attr('data-type'))" >

答案 3 :(得分:1)

你需要这样做......

<select onchange="alert(this.options[this.selectedIndex].getAttribute('data-type'))">
    <option data-type="1" value="a">a</option>
    <option data-type="2" value="b">b</option>
</select>

更改事件中的“this”对象是列表,而不是选项