2009-01-12 11 views
5

que tienen la siguiente línea de código en un enlace en mi página web:¿Por qué la llamada a esta función de JQuery falla en Firefox?

<a href="javascript:$('#comment_form').toggle('normal')" title="Comment on this post"> 

Esto produce un enlace que debe saltar una forma oculta abierta. Funciona en Safari, pero en Firefox, que acaba de obtener una página casi vacía con nada más que el siguiente texto:

[object Object] 

Estoy seguro de que esto tiene algo que ver con el valor devuelto por la función de jQuery, pero No estoy seguro de cómo arreglar la llamada a la función de JavaScript para que también funcione en Firefox.

Respuesta

21

Por el amor de ...

<script type='text/javascript'> 
jQuery(function($){ # Document ready, access $ as jQuery in this scope 
    $("a#comment").click(function(){ # bind a click event on the A like with ID='comment' 
     $('#comment_form').toggleClass('normal'); # Toggle the class on the ID comment form 
     return false; # stop the href from being followed. 
    }); 
}); 
</script> 
.... 
<a id="comment" href="/you_need_javascript_sorry.html" title="Comment on this post"> 
    [Comment] 
</a> 

Por favor, no incrustar JavaScript como el que acaba de hacer en el código HTML.

Si incrusta JavaScript en HTML así, usted:

  1. hacer que el código desordenado.
  2. Tiene problemas extraños como los que acaba de hacer con los hacks para evitarlo
  3. Los usuarios que intenten hacer clic en los enlaces del medio se enviarán a ninguna parte.
  4. El mantenimiento de la parte ejecutable de su código intercalado en los enlaces de la página terminará en un error.
  5. No se degrade graciosamente cuando los usuarios no tengan javascript
  6. Sea problemático cuando empiece a necesitar hacer cosas como cotizaciones de tienda de más de 2 capas de profundidad.
+0

Una razón para no hacerlo de esa manera sería útil. – mipadi

+0

Más depurables, sin duda, pero a veces insistir en esto puede interferir con la simplicidad. – tvanfosson

+0

La misma razón por la que no inserta CSS en la página. Además, es compatible con todos los navegadores y más fácil de mantener a largo plazo. – jacobangel

4

Probar:

<a href="javascript:void($('#comment_form').toggle('normal'))" title="Comment on this post"> 

que contiene el script dentro de un void() suprime el navegador muestre el resultado de la ejecución.


actualización

I directamente respondieron a la pregunta original, con la solución que tendría la menor cantidad de esfuerzo. Como se menciona en algunas de las otras respuestas aquí, personalmente mantendría mi marcado y JavaScript separados y agregaría dinámicamente un controlador onclick en lugar de incrustar el script dentro del atributo href.

+1

-1: este método está bastante desactualizado. No es bueno para el acceso. – Greg

+0

Agradezco la respuesta. Funcionó bien, pero voy a aceptar la más detallada de arriba. – mipadi

2

¿Has intentado mover lo que está en href para hacer clic? En general, debe evitar javascript en el atributo href.

+0

De acuerdo; si absolutamente debe tener javascript en las etiquetas a en sí (generalmente una mala idea en sí misma), al menos póngalo en el atributo onclick.Una forma mejor sería vincular el evento click a los enlaces con jQuery en una etiqueta/archivo de script separado. –

+0

Eso es correcto. Simplemente asumí que el OP tenía una buena razón para subrayarlo. –

0
<a href="http://full-url-to-directory/page#comment_form" 
    onclick="$('#comment_form').toggle('normal');return false;" 
    title="Comment on this post"> 

A pesar de que tendrá que hacer algo en el servidor de forma que cuando se obtiene una referencia al elemento comment_form través de una solicitud por defecto es para que sea visible. Esto permitirá que (esta parte de) su página funcione sin javascript habilitado.

+0

El fragmento de URL (#comment_form) generalmente no se envía al servidor – Greg

+0

Derecha - necesitaría tener la URL completa. Arreglaré esto. – tvanfosson

Cuestiones relacionadas