2011-01-16 17 views
8

Todavía soy nuevo en javascript, y estoy tratando de obtener una función para devolver una variable usando html & javascript. Básicamente, la función debería devolver el botón de opción que el usuario haga clic, aunque en este momento no veo nada devuelto.Cómo devolver una variable desde una función javascript al cuerpo html

la función está aquí:

<script type="text/javascript"> 
function GetSelectedItem() { 
var chosen = "" 
len = document.f1.r1.length 
    for (i = 0; i <len; i++) { 
    if (document.f1.r1[i].checked) { 
chosen = document.f1.r1[i].value 
    } 
    } 
} 
return chosen 
</script> 

Y a continuación, en la sección html tengo estos botones de radio, y mi intento de conseguir la variable "escogidos" salida a la pantalla.

<form name = f1><Input type = radio Name = r1 Value = "ON" onClick=GetSelectedItem()>On 
    <Input type = radio Name = r1 Value = "OFF" onClick =GetSelectedItem()>Off</form> 
    <script type ="text/javascript">document.write(chosen)</script> 

En el momento nada parece ser cada vez devuelto por la función (aunque si la salida que la variable 'elegido' dentro de la función luego de que funciona correctamente.

Gracias de antemano!

+1

está utilizando el retorno del cuerpo de la función exterior – shankhan

+0

Bueno, primero, usar JQuery sería el camino a seguir. JQuery es una biblioteca de JavaScript que es realmente buena para hacer cualquier cosa relacionada con el DOM. –

+0

Google aloja la biblioteca JQuery. Entonces podría hacer la siguiente etiqueta de script en HTML y luego estará listo para usar la API.

Respuesta

7

Aquí hay un enfoque un poco más simple.

En primer lugar, hacer algunas correcciones a su HTML y crear un contenedor para mostrar la salida:

<form name = "f1"> <!-- the "this" in GetSelectedItem(this) is the input --> 
    <input type = "radio" Name = "r1" Value = "ON" onClick="GetSelectedItem(this)">On 
    <input type = "radio" Name = "r1" Value = "OFF" onClick ="GetSelectedItem(this)">Off 
</form> 

<div id="output"></div> 

luego cambia de secuencia de comandos para esto:

<script type="text/javascript"> 
     // Grab the output eleent 
    var output = document.getElementById('output'); 

     // "el" is the parameter that references the "this" argument that was passed 
    function GetSelectedItem(el) { 
     output.innerHTML = el.value; // set its content to the value of the "el" 
    } 
</script> 

... y colocarlo justo dentro de la etiqueta de cierre </body>.

Click here to test a working example.(jsFiddle)

+0

¡Muchas gracias! – anthr

+0

@anthr: De nada. – user113716

4

document.write toma una cadena, y la envía como parte del HTML. Esto es no un valor vivo que se actualiza cuando la variable apuntando a la cadena se actualiza.

Para ello, se quiere necesita realizar DOM manipulation.

+1

¿Por qué votar abajo en esta respuesta? – user113716

+0

+1 Tengo la sensación de que no valía la pena votar por atreverse a sugerir que una persona no debería usar jQuery (al menos al principio). – user113716

2

Cambiar la función JavaScript para algo así:

<script type="text/javascript"> 
function GetSelectedItem() { 
    len = document.f1.r1.length; 
    for (i = 0; i <len; i++) { 
    if (document.f1.r1[i].checked) { 
     document.getElementById('test').textContent = document.f1.r1[i].value; 
    } 
    } 
} 
</script> 

Y luego en el cuerpo:

<div id="test"></div> 
+0

¡Muchas gracias! – anthr

+0

De nada;) –

1

Como pongo en el post. Usar JQuery te facilitaría la vida para este tipo de tareas (y para muchas otras). Lo realmente bueno de JQuery es que a menudo hace que tu sintaxis de JavaScript sea mucho más fácil que luego puedes aprender los detalles esenciales de javascript sobre la marcha. En primer lugar, agregue la etiqueta siguiente secuencia de comandos en su página html

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script> 

Ahora usted tiene la JQuery API

entonces se podría volver a escribir la función como esta.

function GetSelectedItem(btnRadio) 
    { 
     var jqElem = $(btnRadio); 
     $('#output').html(jqElem.attr('value')); //attr('<name of attributre'>) gets the value of the selected attribute 
    } 

su HTML se vería así

<form name = "f1"> 
     <input type = "radio" name = "r1" value = "On" onclick="GetSelectedItem(this)">On 
     <input type = "radio" name = "r1" value = "Off" onclick ="GetSelectedItem(this)">Off 
    </form> 

<div id="output"> 
</div> 

Más o menos, el html() puede obtener y establecer tanto el código HTML del elemento seleccionado.Entonces, simplemente estamos insertando el valor en la etiqueta div.

+0

Su código no funcionará como está escrito porque ha eliminado 'GetSelectedItem()' del contexto global. – user113716

+0

Yikes, problemas de la madrugada. Reparar el próximo –

+0

Mientras tanto, es posible que desee corregir 'btnRadio.val()' ya que no funcionará porque 'btnRadio' es un elemento DOM. – user113716

Cuestiones relacionadas