2012-02-29 15 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所做的一件事情讓生活更輕鬆。

相關問題