2009-08-06 8 views
11

mio scenario:JQuery: come faccio a selezionare un valore da una distinzione tra maiuscole e minuscole tra maiuscole e minuscole?

  • ho una casella di testo che l'utente immette del testo
  • La casella di testo ha una funzione onblur che cerca di selezionare un valore da un DropDownList (se esiste) sulla base degli input di testo

Questo funziona perfettamente se il valore della casella di testo è lo stesso del valore dell'elenco a discesa. Ma voglio che sia insensibile alle maiuscole e alle minuscole.

Quindi, se l'utente digita "stackoverflow", voglio selezionarlo dall'elenco a discesa "StackOverflow". Come posso farlo tramite jQuery?

risposta

13

Ecco un altro approccio: trovare il valore corrispondente nel suo caso reale, "StackOverflow" e chiamare val() con quello.

var matchingValue = $('#select option').filter(function() { 
     return this.value.toLowerCase() == 'stackoverflow'; 
    }).attr('value');  
    $('#select').val(matchingValue); 

Naturalmente, il letterale 'stackoverflow' dovrebbe essere sostituita con una variabile.

+0

Grazie, ha funzionato proprio come volevo! –

4

Penso che il modo migliore per farlo sia guardarlo dal prima piuttosto che dal dopo. Se li fai tutti in minuscolo, sono tutti standardizzati e più facili da lavorare. Quindi tutto quello che devi fare è rendere l'input dell'utente tutto in minuscolo, ed è davvero facile abbinare le cose.

Un'altra opzione è quella di utilizzare una funzione di filtro, come quella found here:

$('something').filter(function() { 
     return (new RegExp(value, "i")).test($(this).attr('attribute')); 
    }); 

valore e attributo devono essere sostituiti però.

1

In sfocatura, scorrere le opzioni e verificare se corrisponde. Quindi seleziona quello che corrisponde.

in codice:

$("#button").blur(function(){ 
    var val = $(this).val(); 
    $("#list option").each(function(){ 
    if($(this).text().toLowerCase() == val) $(this).attr("selected","selected"); 
    }); 
}); 

Non ho prove ancora, in modo da essere sicuri di controllare gli errori di sintassi.

0

La funzione di espressione regolare (RegExp) è probabilmente la strada da percorrere.

var txt = new RegExp(pattern,attributes); 

modello: il modello di testo
attributi: "i" per-maiuscole e minuscole

È possibile combinare con la funzione di filtro. qualcosa del genere dovrebbe funzionare.

$("#textbox").blur(function() { 

    var text = $(this).val(); 

    var dropdownlist = 
     $("select").filter(function() { 
      return (new RegExp(text, "i")).test($(this).attr("id")); 
     }); 

    // do something to dropdownlist 

}); 
Problemi correlati