2010-12-13 42 views
2
$('#select_id1, #select_id2, #select_id3').change(function() { 
    // If '#select_id1' has changed, 'str' should be equal to 'select_id1'. 
    // If '#select_id2' has changed, 'str' should be equal to 'select_id2'. 
    // If '#select_id3' has changed, 'str' should be equal to 'select_id3'. 
    str = <what should be here ?> 
}); 
+0

如果你想與加入改變處理器的選擇,那麼你必須做更多的工作。一個例子是如果select元素可以使用標準以外的id來選擇 - '$(「。select1,#select2,div> .select3」)' – Anurag 2010-12-13 04:39:06

回答

5

您可以通過this.id獲取調用更改的元素的ID。

$('#select_id1, #select_id2, #select_id3').change(function() { 
    str = this.id; 
}); 
1

或(效率較低):

$('#select_id1, #select_id2, #select_id3').change(function() { 
    str = $(this).attr("id"); 
}); 

但基本上this被地設置在事件發生的元素。

+1

真的沒有理由使用它 - 直接獲取時使用jQuery直接可能的DOM屬性是非常低效的,應該不鼓勵。 – 2010-12-13 04:44:20

0

您可以在this.id看直接或間接地通過一個事件對象傳遞:

$('#select_id1, #select_id2, #select_id3').change(function (e) { 
    alert(e.target.id + ' == ' + this.id + ' ... ' + (e.target.id == this.id)); 
}); 

大多數人只是看this但有些時候你可能會感興趣比的只是將較多事件。

1

對於更一般的情況下,在這裏不僅ID用於通過@Anurag的建議,你可以做到以下幾點:

// Save the selector 
var selector = ".someClass, #someId, tr.someTrClass"; 

$(selector).change(function() { 
    var selectors = selector.split(","), 
     matching = []; // Remember that each element can 
         // match more than one selector 
    for (var i = 0, s; s = selectors[i]; i++) { 
     if ($(this).is(s)) matching.push(s); 
    } 

    str = matching.join(","); // Your list of all matching selectors 
}); 
+0

感謝您展示通用代碼! – 2010-12-13 05:02:57

相關問題