2011-09-26 15 views
26

Por el momento estoy usando esto:redirigir el seleccione la opción en el cuadro de selección

<select ONCHANGE="location = this.options[this.selectedIndex].value;"> 

me redirección de la ubicación dentro del valor de la opción. Pero no funciona como se esperaba ... significa que si hago clic en la primera opción de la selección, no se ejecuta la acción onChange. Estaba pensando en javascript, pero creo que tendréis mejores sugerencias chicos. Entonces, ¿cómo puedo hacer que funcione si hago clic en cada opción me redirigirá a su valor?

+0

Eso es JavaScript ya. (JavaScript en línea) – Nathan

+0

Ah, ok gracias por eso: p – Lucas

Respuesta

80

Como la primera opción ya está seleccionada, el evento de cambio nunca se activa. Agregue un valor vacío como el primero y verifique que esté vacío en la asignación de ubicación.

He aquí un ejemplo:

<select onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);"> 
    <option value="">Select...</option> 
    <option value="http://google.com">Google</option> 
    <option value="http://yahoo.com">Yahoo</option> 
</select> 

Y aquí está el violín: http://jsfiddle.net/bL5sq/

+0

Lo hice, pero si el usuario presiona el botón Atrás en el navegador, entonces puede seleccionar el valor 'vacío' y la ubicación del script se romperá. – Lucas

+0

@Lucas A continuación, agregue el atributo 'disabled' al valor" Seleccionar ... "para que al hacer clic en él no ocurra nada:' ' – Nathan

+2

@All - No hay necesidad de eso. ¡El script de arriba no se rompe! –

17

me gustaría sugerir fuertemente alejándose de JavaScript en línea, a algo como lo siguiente:

function redirect(goto){ 
    var conf = confirm("Are you sure you want to go elswhere?"); 
    if (conf && goto != '') { 
     window.location = goto; 
    } 
} 

var selectEl = document.getElementById('redirectSelect'); 

selectEl.onchange = function(){ 
    var goto = this.value; 
    redirect(goto); 

}; 

JS Fiddle demo (404 linkrot victim) .
JS Fiddle demo via Wayback Machine.
Forked JS Fiddle for current users.

En el margen de beneficio en el JS violín la primera opción no tiene ningún valor asignado, por lo que al hacer clic no debe dar lugar a la función de hacer nada, y puesto que es el valor por defecto haciendo clic en el select y seleccionando ese primer defecto option no activará el evento change de todos modos.

Actualización:
La última de ejemplo (2017-08-09) redirigir URLs solicitadas intercambiando debido a errores en cuanto al contenido mixto entre JS violín y ambos dominios, así como los dos dominios que requieren 'sameorigin' para el contenido enmarcado. - Albert

+2

Tres años tarde, pero esta es la mejor respuesta de la OMI. – Eckstein

+0

su enlace de violín da un 404, buena respuesta de lo contrario; ¿Falta HTML, aunque – Manube

+0

tendrá javascript en línea vs javascript estándar diferente en lo que se refiere al rastreo de google? – splinter123

Cuestiones relacionadas