2011-12-20 1 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