2009-02-10 6 views
1

J'essaye de faire évoluer cela mais je suis un peu vert quand il s'agit de créer des fonctions JS. J'ai réussi à aller aussi loin, mais hélas ...Comment puis-je simplifier cette fonction Javascript?

Lorsqu'une travée prend une valeur quelconque (dans ce cas, un nom de ville), je veux que la boîte de sélection corresponde automatiquement. Et je veux l'escalader en me débarrassant de tous ces autres éléments.

$(document).ready(function() { 
    $('select#field1 option').removeAttr('selected'); 
    var whereEvent = $('span#field2').html(); 
    if (whereEvent == 'New York') { 
    $('select#field1 option[value=New York]').attr('selected', 'true'); 
    } else if (whereEvent == 'Los Angeles') { 
    $('select#field1 option[value=Los Angeles]').attr('selected', 'true'); 
    } else if (whereEvent == 'Tokyo') { 
    $('select#field1 option[value=Tokyo]').attr('selected', 'true'); 
    } else if (whereEvent == 'London') { 
    $('select#field1 option[value=London]').attr('selected', 'true'); 
    } else if (whereEvent == 'Sydney') { 
    $('select#field1 option[value=Sydney]').attr('selected', 'true'); 
    } else if (whereEvent == 'Paris') { 
    $('select#field1 option[value=Paris]').attr('selected', 'true'); 
    } 
}); 

Quelqu'un peut-il m'aider? Je promets que je serai reconnaissant pour votre aide. Je vous remercie.

+0

Vous ne devriez pas utiliser '' attr' et removeAttr' pour cela - ce que vous voulez est '.prop ('sélectionné', true/false)' – Bergi

Répondre

5

Ceci est une option:

$(document).ready(function() { 
     $('select#field1 option').removeAttr('selected'); 
     var whereEvent = $('span#field2').html(); 
     var filter = 'select#field1 option[value=' + whereEvent + ']'; 
     $(filter).attr('selected', 'true'); 
    } 

Ou vous pourriez faire:

$(document).ready(function() { 
     var filter = $('span#field2').html(); 
     $('select#field1 option').each(function(){ 
      this.selected = (this.value == filter); 
     }); 
    } 
+0

Cela fonctionne aussi. Je vous remercie. –

+0

Vous n'avez pas non plus besoin d'enleverAttr, la définition d'une option sélectionnée désélectionne celle sélectionnée précédemment. – bobince

3

Peut-être:

$('select#field1 option').removeAttr('selected'); 
var whereEvent = $('span#field2').html(); 
$('select#field1 option[value='+whereEvent+']').attr('selected', 'true'); 

?

+0

C'est là que je ne comprenais pas. "si" n'est pas nécessaire ici. Je vous remercie! –

0

Je ne sais pas jQuery, donc il y a probablement une façon plus élégante, mais:

var whereEvent = $('span#field2').html(); 
$('select#field1 option[value=' + whereEvent + ']').attr('selected', 'true'); 
0

Cela fonctionnera au moins, et cela semblera logique aussi bien.

$(document) 
.ready(function() { 
$("select#field1 option") 
    .removeAttr("selected"); 
var a = $("span#field2") 
    .html(); 
a == "New York" ? $("select#field1 option[value=New York]") 
    .attr("selected", "true") : a == "Los Angeles" ? $("select#field1 option[value=Los Angeles]") 
    .attr("selected", "true") : a == "Tokyo" ? $("select#field1 option[value=Tokyo]") 
    .attr("selected", "true") : a == "London" ? $("select#field1 option[value=London]") 
    .attr("selected", "true") : a == "Sydney" ? $("select#field1 option[value=Sydney]") 
    .attr("selected", "true") : a == "Paris" && $("select#field1 option[value=Paris]") 
    .attr("selected", "true") 
}) 
Questions connexes