2012-01-03 14 views
7

tengo una función que es llamada por onbeforeunload. Dentro de Deseo reiniciar todas las listas desplegables pero no puedo encontrar el método correcto para restablecerlos de nuevo al valor 0.Reajustar todos los menús desplegables seleccione

<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

que no debería tener más de un elemento con el mismo '' name' o id' como '# r15ro12' y todos sus elementos de formulario (' input', 'select' etc) deben estar dentro de la' form'. – Stefan

+0

que acabo de hacer una copia rápida y pegar, por ejemplo, no tengo en mi código, gracias por los comentarios, aplausos –

+0

Ok, eso es genial! ¿También se pregunta por qué uno quisiera restablecer las selecciones en 'descargar'? (Asumiendo que estás cerrando una ventana emergente) – Stefan

Respuesta

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

esto selecciona la primera opción (no necesariamente tiene un valor = 0)

+0

Gracias Fabricio por la ayuda, pero no trabajar, que se ve bien para mí –

+0

mhhh ... http: // jsFiddle.net/RSk9q/funciona como se esperaba – fcalderan

+0

Keith, el código anterior solo funcionará si ha incluido la biblioteca jQuery. – nkm

1

Prueba esto:

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

¿Qué tal algo como:

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

Con código de JavaScript sin procesar, podemos hacer lo siguiente ng,

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

tope aquí tienes una manera de seleccionar la primera opción en todas las select s utilizando JavaScript nativa;

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

... pero jQuery es muy práctico y hace que la mayoría de las cosas mucho más fácil.

1

En primer lugar no se debe utilizar el mismo nombre/ID de la etiqueta diferente. Debe ser único para cada etiqueta.

En la llamada etiqueta de la función como,

Entonces alterar ur diversión como función DisplayMessage() { var x = document.getElementsByTagName ('seleccionar'); para (var i = 0; i < 2; i ++) { document.getElementById (x [i] .id) .options [0] .selected = "0"; }}

0

Prueba esto:

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

Otra forma

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

DEMO

+0

¿Parece que no funciona? – Mikeys4u

+0

@ Mikeys4u does not demo funciona para usted? – h0mayun

1

Las soluciones de jQuery que he visto hasta el momento no se tienen en cuenta para eliminar el selected atributo anterior si existe, por lo tanto, creo que se requiere este paso adicional:

$("#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'); 
      }); 
     } 
}); 

Esta solución solo conserva un atributo selected en la primera opción y elimina todos los demás (si corresponde).

Cuestiones relacionadas