2010-08-19 28 views

Respuesta

9

¿Puedo usar lo siguiente en todos los navegadores?

Es esta "mala práctica" en lo que respecta a las normas?

"Mala práctica" y "Cumplimiento de normas" son cosas diferentes. Cumple con los estándares, pero también, por tres razones, es una mala práctica.

  1. No es unobtrusive. Los controladores de eventos se aplican mejor con JS.
  2. Se vincula a la parte superior de la página (#) y siempre enviará el navegador allí, incluso si se ejecuta el JS.
  3. Si falla el JS, no pasará nada útil. Debe build on stuff that works.

¿Funcionará en IE, FF, Safari y Chrome?

+2

El hecho de que usar un atributo de manejador de eventos no sea "discreto" no tiene nada que ver con los estándares. De hecho, los atributos del controlador de eventos como 'onclick' ** están ** estandarizados en las especificaciones de HTML 4. –

+2

"mala práctica" y "estándares" son cosas diferentes. Voy a aclarar la respuesta. – Quentin

+0

@czupe - El método 'click()' no tiene absolutamente nada que ver con la pregunta o esta respuesta (que se trata de * asignar * eventos, no * activarlos * programáticamente). – Quentin

0

Debería funcionar en los navegadores que mencionó.

tratar de entrar en el hábito de poner un ; al final de la 'línea' cada Javascript:

<a href="#" onclick="doSomething();">Click here.</a> 

A pesar de que va a funcionar bien sin él, si hace que buena costumbre entonces usted puede ahorrar usted mismo tiene problemas más adelante cuando escribe scripts más grandes.

Si no desea que el # que se mostrará en la barra de direcciones:

<a href="#" onclick="doSomething(); return false;">Click here.</a> 
+0

Sé JS, sólo estoy un poco oxidado. Gracias por el puntero sin embargo. – Moshe

0

De esta Wikipedia pageonClick aparece en la sección de eventos del W3C/Común y es soportado por los navegadores que mencionas.

Como un aparte si no fuera así, la mayoría de las aplicaciones web no funcionarían en estos navegadores.

2

onclick es un navegador cruzado. La discusión sobre estándares y mejores prácticas es mucho más grande, por supuesto. La mayoría diría que se prefiere 'mejora progresiva'. La explicación simple de esto es que el enlace todavía haría lo correcto, la versión de JavaScript solo mejoraría el comportamiento. Si esto es importante para usted realmente depende de lo que esté haciendo, cuál es el proyecto, etc.

0

Funcionará en todos los navegadores, pero como una mejor práctica la mayoría se conecta con manejadores de clics como jQuery's $('a').click(doSomething); que hace el JavaScript más independiente del HTML. También de esa manera se pueden conectar múltiples controladores y con los manejadores de métodos de jQuery live se pueden agregar elementos HTML que se agregan dinámicamente a la página.

6

A pesar de que algunas personas podrían decir, no es mala práctica (con la advertencia de que es el único detector de eventos que desea en este elemento), y es la forma más simple (y más frecuente) de utilizar un detector de eventos , pero hay dos cambios que le haría.

En primer lugar, si Javascript no está habilitado, el enlace será inútil (aunque el href # hará que el navegador se desplace hasta la parte superior de la página, lo que probablemente no sea deseable). Del mismo modo, con Javascript activado, al hacer clic en el enlace, el navegador seguirá el href y se desplazará hacia arriba.

En su lugar, me gustaría usar algo como esto:

<a href="[url to JS-less way of doing the same thing]" onclick="doSomething(); return false">Click here</a> 

Alternativamente, si es realmente un javascript-único, que puede crear el enlace oculto por defecto usando CSS y el uso de JavaScript para que sea visible (para que los usuarios con JS deshabilitados no vean un enlace inútil).

+0

Sí, este es totalmente el camino a seguir. Para agregar la cuestión del navegador cruzado, onclick estaba disponible en los elementos '' con hrefs (pero no en aquellos con solo nombres) desde el momento en que NS2 era el primer navegador con Javascript. –

Cuestiones relacionadas