2012-10-18 88 views
0

我有幾個<select>盒子都使用相同的前綴,我想設置一個遞歸函數來爲我做主要工作。使用jQuery和.change()選擇html元素id

$('[id^="by_"]').change(function(e) 
      { 
       var elem = e; 
       console.log(e.value); 
      }); 

基於這段代碼我的意圖很清楚嗎?我在正確的軌道上嗎?

控制檯打印出:undefined

+0

工作是否有問題.. ?? –

+1

我認爲你在正確的軌道上 - 你使用的選擇符匹配前綴「by_」,並且你將「change」事件綁定到所有這些事件。確保你把它放在'$(document).ready'或類似的地方。你對這段代碼有任何問題嗎?除了使用'e'參數外,您還可以在函數內部使用'this'來引用元素,使用'$(this)'來獲取它的jQuery對象。 – Ian

+0

@ianpgall這正是我需要的!你可以添加一個答案,以便我可以投票嗎? –

回答

2

我認爲你是在正確的軌道上 - 你正在使用的選擇匹配「by_」的前綴,並且將更改事件綁定到所有這些事件。確保你把它放在$(document).ready或類似的地方。你對這段代碼有任何問題嗎?而不是使用e參數,我只需在函數內部使用this來引用元素,並使用$(this)來獲取它的jQuery對象。因此,要獲得的價值,你會使用:

this.value 
// or 
$(this).val() 

(忽略eelem的東西,雖然它不會是一個壞主意來存儲$(this)在像elem所以你可以有它的一個引用而不是重新創建jQuery對象每次你需要它的時候)

當使用回調與jQuery的事件,回調的(第一個)參數是一個event對象,解釋有關事件發生很多事情(http://api.jquery.com/category/events/event-object/)並沒有持有這個元素 - 這就是this

0

既然你已經使用jQuery,爲什麼不能是這樣的:

$('[id^="by_"]').change(function(e) 
{ 
    var $elem = $(this); 
    console.log($elem.val()); 
}); 
1

e在你的代碼是不具有value財產的事件對象,你應該使用this代替:

$('[id^="by_"]').change(function(e) { 
    var elem = this; 
    console.log(this.value); 
}); 

或者,如果你想使用event對象,你可以使用target屬性:

e.target.value 
0

是不是更像這樣的事情:

$('[id^="by_"]').change(function() 
      { 
       console.log($('option:selected',this).val()); 
      }); 
​ 

jsfiddle

+0

不需要 - '$(this).val()'保存當前選定的值。如果你需要得到'option'的文本,你可能需要這樣的東西。但顯然這仍然工作 – Ian

+0

雅,你是對的! –