2012-02-29 50 views
2

我有这样的代码在这里:

<select id="test"> 
     <option value="1">test1</option> 
     <option value="2" selected="selected">test2</option> 
     <option value="3">test3</option> 
</select> 

在我的剧本我有这两个行代码,一个是JavaScript和另外一个是jQuery的像这样:

var e = document.getElementById("user"); 
var e1 = $("#user"); 

我甚至打印出那些在我的控制台是这样的:

console.log(e) 
console.log(e1) 

他们打印同样的事情。但是,当我写一个on变化事件这样的代码:

$("#user").change(function() { 
     console.log(e.options[e.selectedIndex].text) 
}); 

它究竟是什么样的打印,我从下拉选择了。这个从dom中获取的javascript方法正在工作。与e1像这样的事情一样:

$("#user").change(function() { 
    console.log(e1.options[e1.selectedIndex].text) 
}); 

抛出一个错误:

Uncaught TypeError: Cannot read property 'undefined' of undefined (anonymous function)create:167 f.event.dispatchjquery-1.7.1.min.js:3 f.event.add.i.h.handle.i

(从Chrome的开发者工具看到)

回事请告诉我?我是新来的Javascript和jquery!为什么在我的情况下jquery不工作?

+0

其实,他们不打印同样的东西。另一个打印一个DOM对象,另一个打印一个jQuery对象。 – JJJ 2012-02-29 10:16:39

+0

@Juhana:哦! 'console.log'只是骗了我! * _ * – 2012-02-29 10:23:32

回答

4

由于您使用jQuery和e1是一个jQuery对象,尝试:

console.log(e1.find('option:selected').text()) 

抢你可以使用get()实际元素:

var select = $('#select').get(0) // Grab original DOM element 
select.options // It'll work now... 
+2

这工作!但为什么以前没有? – 2012-02-29 10:16:29

+0

因为它不只是一个常规元素,它是一个jQuery集合。请参阅编辑 – elclanrs 2012-02-29 10:16:46

0

console.log(e1[0].options[e1[0].selectedIndex].text)

4
var e = document.getElementById("user"); 

这会创建一个javascript对象。

var e1 = $("#user"); 

这创建了一个jquery对象。你不能在这个上使用javascript属性。你必须使用jQuery属性。

0

您在文章顶部给出的选择菜单的ID为'test'而不是'user'。我假设你实际使用的代码有一个'user'的id。 e1是一个jQuery对象,因此要访问它的值使用e1.val()而不是e1.options [e1.selectedIndex] .text。您正在将JavaScript代码与jQuery代码混合在一起。

0

e1是一个jQuery对象,因为您使用jQuery来选择它。这不是正常的js dom元素,这是你如何使用它的方式。

这应该更好地工作。

$( “#用户”)改变(函数(){ 的console.log(e1.val()); });

val()是一个jQuery函数,它为表单元素值提供了一个统一的包装,因此您无需查找选定的索引,从select obj中访问它,等等。这是jQuery所做的一件事情让生活更轻松。