2011-12-20 5 views
14

Ho qualche domanda sulla selezione jquery. Nel mio caso, come abbinare se lo option.value è uguale a qualcosa, contrassegnare uno selected per esso. Online code hereselezione jquery se option.value è uguale a qualcosa, contrassegna un selezionato

ripetere il codice. Ha causato Uncaught TypeError: Object #<HTMLOptionElement> has no method 'val', come lavorare come la mia speranza? Grazie.

<script type="text/javascript"> 
$(document).ready(function(){ 
    var num = 3; 
    $("div#selection select.select option").each(function(){ 
     if((this).val()==num){ 
      $(this).attr("selected","selected");  
     } 
    }); 
}); 
</script> 
<div id="selection"> 
    <label>Label1:</label> 
    <select class="select"> 
     <option value="1">V1</option> 
     <option value="2">V2</option> 
     <option value="3">V3</option> 
    </select> 
    <label>Label2:</label> 
    <select class="select"> 
     <option value="4">U1</option> 
     <option value="5">U2</option> 
     <option value="6">U3</option> 
    </select> 
</div> 
+0

Forse questo post può aiutarti: http://stackoverflow.com/q/196684/508702 –

risposta

16

hai fatto un errore di battitura

Invece di (this).val() si dovrebbe usare $(this).val() nella vostra istruzione if. this fa riferimento a un HTMLObject, $(this) farebbe riferimento a un oggetto jQuery. Poiché il metodo .val() fa parte del framework jQuery, non è possibile utilizzarlo su HTMLObjects. Ma sono sicuro che lo sapevi perché somiglia molto a un piccolo refuso.

Questo dovrebbe funzionare:

$(document).ready(function(){ 
    var num = 3; 
    $("div#selection select.select option").each(function(){ 
     if($(this).val()==num){ // EDITED THIS LINE 
      $(this).attr("selected","selected");  
     } 
    }); 
}); 

Modifica

Si potrebbe ottimizzare il ciclo con l'aggiunta di un return false; (break; per i cicli di vaniglia) quando avete trovato il vostro elemento in modo che doesn' t mantenere elementi in loop mentre siamo già "fatti".

Tuttavia, si dovrebbe guardare risposta di Nicola Peluchetti per un codice più efficiente e più pulito.

0

La prima volta che si fa riferimento a this non è un oggetto jQuery, è un oggetto DOM e un oggetto DOM non ha il metodo val(). Si dovrebbe usare sia this.value och $(this).val() provare questo:

$("div#selection select.select option").each(function(){ 
     if($(this).val()==num){ 
      $(this).attr("selected","selected");  
     } 
    }); 
0

Il codice funziona bene. Aggiorna 'questo' con $ (questo). Se non ci sono altri menu a discesa di selezione, puoi omettere "seleziona selezione div #". come sotto

$(document).ready(function(){ 
    var num = 3; 
    $("select option").each(function(){  
     if($(this).val()==num){ 
      $(this).attr("selected","selected");  
     } 
    }); 
}); 
15

Si dispone di un errore di battitura e di impostare l'opzione come selezionata si dovrebbe usare prop() e non attr(). in ogni caso si potrebbe fare

var num = 3; 
$("div#selection select.select option[value="+num+"]").prop("selected", true); 

violino qui http://jsfiddle.net/YRBrp/

EDIT - l'errore di battitura, naturalmente, è quello di Tim S. ha sottolineato, è necessario utilizzare $(this).val() e non (this).val()

+0

Concordo pienamente con tu, ma questo non spiega il suo errore –

+0

Inoltre, Ho modificato il mio post e ho fatto riferimento a questa risposta perché è così sexy. –

+0

Mi hai salvato! Non potevo pensarci da solo. +1 –

0

prova sotto

$("div#selection select.select").val(num); 

se la casella di selezione è selezionata in più, è possibile provare

$("div#selection select.select option").each(function(){ 
     if($(this).val()==num){ 
     $(this).attr("selected", true);  
     } 
    }); 
1

Il vostro problema comincia qui

$ ("div # selezione select.select opzione").ciascuna (function() { se ((questo) .VAL() == num) {

cambiamento a

$("div#selection select.select").each(function(){ 
if($(this).val()==num){ 

e tutto il vostro problema risolto. Si potrebbe desiderare di cambiare il .each to .change se stai pensando di far scattare lo script ogni volta che la selezione viene modificata

Problemi correlati