2012-04-12 6 views
5

estoy tratando de cargar 2 javascript eventos/funciones en el proceso de carga del cuerpo de la siguiente manera: -Cargando Javascript en proceso de carga del cuerpo con 2 funciones

<body onLoad="getSubs(document.form1.HotelID.options[document.form1.HotelID.selectedIndex].value);getTags(document.form1.HotelID.options[document.form1.HotelID.selectedIndex].value);"> 

cuando cargo con 2 funciones el primero aborta - pero si simplemente cargue el que funciona bien - ¿Estoy haciendo algo mal si no es posible poner 2 funciones dentro de la carga?

+1

realmente debe evitar los manipuladores en línea. hacen que tu código sea imposible de mantener. De todos modos, al parecer, no tiene errores de sintaxis – fcalderan

+1

Vea también: [Por qué CSS en línea y el código de JavaScript son cosas tan malas] (http://robertnyman.com/2008/11/20/why-inline-css-and-javascript-code -is-such-a-bad-thing /). Además, acceder a formularios directamente como propiedades de 'document' no es estándar. Acceda a ellos como propiedades de 'document.forms', y elementos como propiedades de la propiedad' elements' del formulario (p. Ej. 'Document.forms.form1.elements.HotelId') o directamente por ID (p. Ej.' Document.getElementById ('HotelID')) ', asumiendo que la entrada llamada 'HotelID' también recibió la misma ID). – outis

+0

No estoy seguro si hace alguna diferencia, pero las dos funciones hacen una solicitud AJAX. –

Respuesta

0

Una cosa que podría hacer es crear una nueva función JS que acepte el parámetro document.form1.HotelID.options [document.form1.HotelID.selectedIndex] .value y llame a las dos funciones en la función recién creada.

Intenté llamar a dos funciones usando el siguiente código y funcionó bien para mí.

<html> 
    <body onload="callStart();callAgain();"> 
     <script type="text/javascript"> 
      function callStart() { 
       alert('First'); 
      } 
      function callAgain() { 
       alert('Again'); 
      } 
     </script> 
    </body> 
</html> 
+0

Eso es algo realmente feo que está haciendo aquí. Ver http://stackoverflow.com/questions/4478795/what-is-unobtrusive-javascript-in-layman-terms –

7

Sólo hazlo de java script en su lugar, uno de los enlaces compartidos en un comentario explica bien por qué es mejor utilizar este enfoque sobre los atributos de línea.

<head> 
<script> 
document.body.onload = function() { 
getSubs(...); 
getTags(...); 
}; 
</script> 
</head> 
<body> 
... 
</body> 
8

probar esto:

<html> 
<head> 
<script language="javascript"> 
function func1(){ 
    //the code for your first onload here 
    alert("func1"); 
} 
function func2(){ 
    //the code for your second onload here 
    alert("func2"); 
} 
function func3(){ 
    //the code for your third onload here 
    alert("func3"); 
} 
function start(){ 
    func1(); 
    func2(); 
    func3(); 
} 
</script> 
</head> 
<body onload="start()"> 
</body> 
</html> 

Multiple onload

1

Me volvería a evitar a toda costa que tienen inline javascript, eso es lo que lo hizo en el código de su pregunta: añadir javascript dentro de una Atributo HTML


La mejor práctica es añadir su Javascript en un archivo separado, consulte la pregunta relacionada con este principio What is Unobtrusive Javascript in layman terms?

Por lo que tendría otro archivo llamado para "myjsfile.js" instancia, a continuación, hacer referencia a ella desde la página HTML

<script src="./path/to/your/myjsfile.js"></script> 

Aquí está la respuesta a dónde colocar esta referencia: Where to place Javascript in a HTML file?

tu " myjsfile.js" archivo simplemente tendría:

window.onload = function(){ 
    getSubs(...); 
    getTags(...); 
}; 

Otra cosa a evitar: añadir javascript dentro del mismo archivo HTML. La razón también se basa en el mismo principio de unobstrusive javascript. What is Unobtrusive Javascript in layman terms?

Pero supongo que hay casos de esquina donde es posible que desee hacer eso.

Si realmente tiene que hacerlo, utilizar window.onload en lugar de la línea JavaScript onload="...", ver por qué aquí window.onload vs <body onload=""/>

Apenas añada lo siguiente a su archivo HTML:

<script type="text/javascript"> 
    window.onload = function(){ 
     getSubs(...); 
     getTags(...); 
    }; 
</script> 

Aquí está la respuesta a dónde para colocar este código: Where to place Javascript in a HTML file?

Nota: Sí, en el mismo lugar donde pondría la referencia a un archivo externo de Javascript


Otra cosa: no sé donde se definen sus getSubs() y getTags() funciones. Pero si quiere que su código funcione, necesita llamar a estas funciones después de que el archivo (o parte de javascript) que las define haya sido cargado.

En resumen: Asegúrese de que el archivo JavaScript que contiene las definiciones de getSubs() y getTags() está referenciado antes su código.

Cuestiones relacionadas