Javascript document.getElementById正常工作,但$抛出错误

Javascript document.getElementById正常工作,但$抛出错误,javascript,jquery,Javascript,Jquery,我这里有这个代码: <select id="test"> <option value="1">test1</option> <option value="2" selected="selected">test2</option> <option value="3">test3</option> </select> 我甚至在我的控制台上打印出如下内容:

我这里有这个代码:

<select id="test">
        <option value="1">test1</option>
        <option value="2" selected="selected">test2</option>
        <option value="3">test3</option>
</select>
我甚至在我的控制台上打印出如下内容:

 console.log(e)
 console.log(e1)
$("#user").change(function() {
        console.log(e.options[e.selectedIndex].text)
 });
他们正在印刷同样的东西。但当我写一个关于变更的事件代码时,如下所示:

 console.log(e)
 console.log(e1)
$("#user").change(function() {
        console.log(e.options[e.selectedIndex].text)
 });
它正是打印我从下拉列表中选择的内容。这种从dom获取的javascript方法正在工作。e1也是这样:

var e = document.getElementById("user");
var e1 = $("#user");
$("#user").change(function() {
    console.log(e1.options[e1.selectedIndex].text)
 });
正在抛出错误:

未捕获的TypeError:无法读取undefined的属性“undefined” 匿名函数创建:167 f、 event.dispatchjquery-1.7.1.min.js:3 f、 event.add.i.h.handle.i

从chrome的开发者工具看


发生什么事了?我对Javascript和jquery都是新手!在我的例子中,为什么jquery不起作用?

因为您使用的是jquery,e1是一个jquery对象,请尝试:

console.log(e1.find('option:selected').text())
要获取实际元素,可以使用get:

console.loge1[0]。选项[e1[0]。已选择索引]。文本

这将创建一个javascript对象

var e1 = $("#user");

这将创建一个jquery对象。您不能在此服务器上使用javascript属性。您必须使用jquery属性。

您在文章顶部提供的选择菜单的id为“test”而不是“user”。我假设您实际使用的代码的id为“user”。e1是一个jQuery对象,因此要访问它的值,请使用e1.val而不是e1.options[e1.selectedIndex].text。您将javascript代码与jQuery代码混合使用。

e1是一个jQuery对象,因为您使用jQuery来选择它。它不是普通的JSDOM元素,这正是您试图使用它的方式

这应该更好地发挥作用:

$user.changefunction{ console.loge1.val;  };


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

实际上,它们并不打印相同的内容。另一个打印DOM对象,另一个打印jQuery对象。@Juhana:噢!console.log欺骗了我_因为它不仅仅是一个常规元素,而是一个jQuery集合。参见编辑