2013-03-04 10 views
5

Sto provando a selezionare automaticamente l'opzione in selezione da jquery dopo aver recuperato il valore dell'opzione che deve essere selezionato. Tuttavia non funziona in Chrome. Funziona in Firefox e IE 9. Perché è così? la funzione di riempimento è quella che riempie i valori. (res funzione, azzera solo i valori inseriti da riempimento e la funzione non è importante per questa domanda)opzione jquery selezionare non funziona in chrome

function fill(thisValue) { 
    $('#inputString').val(thisValue); 
    $.post("get.php?op=category", {queryString: ""+thisValue+""}, function(data){ 
      if(data.length >0) { 
       $("#mymenu option[value='"+data+"']").attr('selected', 'selected'); 
       $('#mymenu').attr("disabled","disabled"); 
      } 
     }); 
    $.post("get.php?op=name", {queryString: ""+thisValue+""}, function(data){ 
      if(data.length >0) { 
       $('#nameString').val(data); 
       $('#nameString').attr("disabled","disabled"); 
      } 
     }); 
    $.post("get.php?op=author", {queryString: ""+thisValue+""}, function(data){ 
      if(data.length >0) { 
       $('#authorString').val(data); 
       $('#authorString').attr("disabled","disabled");     
      } 
     }); 
    $.post("get.php?op=publisher", {queryString: ""+thisValue+""}, function(data){ 
      if(data.length >0) { 
       $('#publisherString').val(data); 
       $('#publisherString').attr("disabled","disabled"); 
      } 
     }); 


    setTimeout("$('#suggestions').hide();", 200); 
} 

function res(inputString) { 
$('#publisherString').attr("disabled", false); 
$('#publisherString').val(''); 
$('#nameString').attr("disabled",false); 
$('#nameString').val(''); 
$('#authorString').attr("disabled",false); 
$('#authorString').val(''); 
$('#mymenu').attr("disabled",false); 
$('#mymenu option').attr('selected', false); 
} 
+0

Prova a cambiare 'attr ('selected', 'selected')' a 'prop ('selected', true)' –

risposta

9

È possibile utilizzare val() per impostare il valore di un elemento select.

Change

$("#mymenu option[value='"+data+"']").attr('selected', 'selected'); 

a

$("#mymenu").val(data); 

Demo Fiddle

Un'altra soluzione è quella di utilizzare prop(). Il metodo attr() viene utilizzato per impostare il valore dell'attributo dell'elemento non per impostare la proprietà.

$('#mymenu option[value="5"]').prop('selected', true) 

Si può leggere di più su attr vs prop, così come il jQuery 1.6 release note

Demo Fiddle

0

Quando si utilizza i dati con un errore di battitura nel prospetto di seguito sembra che val non sta funzionando. Mi ci è voluto un po 'per notarlo.

$("#mymenu").val(data); 
0

Ecco qualcosa che ho appena notato in merito al nome impostato nel tag opzione. Userò il mio codice come esempio. Vedi dove dice Blu e Nero sotto?

<option value="b">Blue</option> 
<option value="k">Black</option> 

Diciamo che Blu è attualmente selezionato. Se si preme la lettera "B" sulla tastiera (la distinzione tra maiuscole e minuscole non importa) non cambierà a prescindere da cosa. Questo è vero anche se si dispone di un evento onKeyDown che dovrebbe impostare il valore, come ad esempio:

$(function() { 
    // Set the value on key down 
    $("select[id=stoneColor1]").on("keydown", function(e) { 

     var key = String.fromCharCode(e.keyCode); 
     for (var i=0; i<stoneColorOptions.length; i++) { 
      if (stoneColorOptions[i].keyPress == key) { 
       $("#stoneColor1").val(key.toLowerCase()); 
       break; 
      } 
     } 
    }); 
}); 

Recall ho detto che il codice di cui sopra non funziona se ho

<option value="b">Blue</option> 
<option value="k">Black</option> 

Tuttavia, funziona quando ho

<option value="b">(B) Blue</option> 
<option value="k">(K) Black</option> 

Quindi sì, morale della storia: sembra avere anche prendere in considerazione la prima lettera nel nome di opzione.

+0

Questa è un'osservazione interessante, ma non penso che questo abbia qualcosa a che fare con l'originale domanda. – cpburnz

Problemi correlati