2012-01-03 15 views
7

Ho una funzione che viene chiamata da onbeforeunload. All'interno desidero ripristinare tutti i menu a discesa ma non riesco a trovare il metodo giusto per reimpostarli sul valore 0.Ripristina tutti i menu a discesa di selezione

<head> 
    <script type="text/javascript"> 
     function displaymessage() { 
      document.getElementsByTagName('select').value = 1; 
      //or 
      document.getElementsByTagName('select').options.length = 0; 
     } 
    </script> 
</head> 

<body> 
    <form> 
     <input type="button" value="Click me!" onclick="displaymessage()" /> 
    </form> 

    <select name="data[Rate][15][12][num_rooms]" id="r15ro12"> 
     <option value="0">0</option><option value="1">1 Rooms</option> 
     <option value="2">2 Rooms</option><option value="3">3 Rooms</option><option value="4">4 Rooms</option> 
     <option value="5">5 Rooms</option><option value="6">6 Rooms</option><option value="7">7 Rooms</option> 
     <option value="8">8 Rooms</option><option value="9">9 Rooms</option> 
    </select> 

    <select name="data[Rate][15][12][num_rooms]" id="r15ro12"> 
     <option value="0">0</option><option value="1">1 Rooms</option> 
     <option value="2">2 Rooms</option><option value="3">3 Rooms</option><option value="4">4 Rooms</option> 
     <option value="5">5 Rooms</option><option value="6">6 Rooms</option><option value="7">7 Rooms</option> 
     <option value="8">8 Rooms</option><option value="9">9 Rooms</option> 
    </select> 
</body> 
</html> 
+1

Non si dovrebbe avere più di un elemento con lo stesso 'nome' o' id' come '# r15ro12' e tutti gli elementi del modulo (' input', 'select' ecc.) Dovrebbero essere all'interno di' form'. – Stefan

+0

Ho appena fatto un veloce copia e incolla per esempio, non ce l'ho nel mio codice, grazie per il feedback, evviva –

+0

Ok, è grandioso! Ci si chiede anche perché si vorrebbe ripristinare le selezioni su 'scarica'? (supponendo che tu stia chiudendo una finestra popup) – Stefan

risposta

21
function displaymessage() { 
    $("select").each(function() { this.selectedIndex = 0 }); 
} 

questo sceglie la prima opzione (non necessariamente dover value = 0)

+0

Grazie Fabrizio per l'aiuto, ma non ha funzionato, mi sembra giusto –

+0

mhhh ... http: // jsfiddle.net/RSk9q/funziona come previsto – fcalderan

+0

Keith, il codice sopra funzionerà solo se hai incluso la libreria jQuery. – nkm

1

Prova questo:

function displaymessage() { 
    $("select").val("0"); 
} 
3

ne dite qualcosa di simile:

$(window).unload(function() { 
    $("select").val("0"); 
}); 
1

Con codice javascript raw, possiamo fare il followi ng,

elements = document.getElementsByTagName("select") 
for(i=0; i < elements.length ; i++){ 
elements[i].selectedIndex= 0; 
} 
4

Here's un modo per selezionare la prima opzione in tutte le select s utilizzando nativo JavaScript;

... ma jQuery è molto utile e rende la maggior parte delle cose molto più semplice.

1

Prima di tutto non si dovrebbe usare lo stesso nome/id per il tag differente. Dovrebbe essere unico per ogni tag.

Nella chiamata tag la funzione come,

Poi modificare ur divertente come funzione displayMessage() {var x = document.getElementsByTagName ('selezionare'); per (var i = 0; i < 2; i ++) { document.getElementById (x [i] .id) .options [0] .selected = "0"; }}

0

Prova questo:

$('select').each(function() { 
    if ($(this).children().length > 0) { 
     $($(this).children()[0]).attr('selected', 'selected'); 
    } 
}); 
1

ancora un altro modo

$('select option:first-child').attr('selected', 'selected'); 

DEMO

+0

Non sembra funzionare? – Mikeys4u

+0

@ Mikeys4u non funziona la demo per te? – h0mayun

1

Le soluzioni jQuery che ho visto finora non tengono conto di rimuovere il precedente attributo selected se ne esiste uno, quindi credo che sia necessario questo passaggio aggiuntivo:

$("#myControlId").find("select").each(function (index) { 
     var ctrl=$(this);  
     if (ctrl.children().length > 0) { 
      $(ctrl.children()).each(function(index) { 
       if (index===0) $(this).attr('selected', 'selected'); 
       else $(this).removeAttr('selected'); 
      }); 
     } 
}); 

Questa soluzione mantiene solo un attributo selected nella prima opzione e rimuove tutti gli altri (se applicabile).

Problemi correlati