2010-12-13 4 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

Si vous voulez que le sélecteur avec lequel a été ajouté le gestionnaire de changement, vous avoir à faire plus de travail. Un exemple serait si l'élément select peut être sélectionné en utilisant des critères autres que id - '$ (". Select1, # select2, div> .select3 ")' – Anurag

Répondre

5

Vous pouvez obtenir l'ID de l'élément qui a invoqué la modification par this.id.

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

Ou (moins efficace):

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

Mais fondamentalement this est fixé à l'élément sur lequel l'événement a eu lieu.

+1

Il n'y a vraiment aucune raison de l'utiliser - en utilisant jQuery lorsque vous obtenez directement le L'attribut DOM directement possible est massivement inefficace et devrait être découragé. –

0

Vous pouvez regarder this.id directement ou indirectement par un passé dans l'objet de l'événement:

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

La plupart des gens regardent juste this mais il y a des moments où vous pourriez être intéressé par plus que la cible de votre un événement.

1

Pour le cas plus général, où non seulement les ID sont utilisés, comme le suggère @Anurag, vous pouvez effectuer les opérations suivantes:

// 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

Merci d'avoir montré le code général! –