2012-01-13 21 views
6

que tienen un código como éstehref jQuery y separación onclick

<a id="id101" href="javascript:func1();" onclick="return func2();">Link</a> 

func2 devuelve verdadero o falso. Entonces, func1 se llama solo cuando function2 devuelve verdadero. Correcto ?

En jQuery aprendizaje, descubrí que onclick no es bueno y se deprecia, por lo que modificó el código anterior a

<a id="id101" href="javascript:func1();">Link</a> 
jquery 
$("#id101").click(func2() { 
    //same stuffs from before which was in func2 
}); 

Ahora, mi pregunta es:

después de tomar clic manejador cuidado, ¿qué puedo hacer con JavaScript dentro de href? ¿Debería invocar func1 dentro de func2 en jQuery click handler de func2, cuando la condición dentro de func2 es verdadera? ¿O hay alguna solución elegante?

Además, la separación de html y código de eventos es buena, pero aquí este elemento con id id101 puede tener muchos eventos asociados, y en un archivo grande, puede haber tantos elementos html con muchos eventos. Entonces, cuando tengo una página grande con muchos manejadores de eventos, entonces ¿cómo puedo saber qué elemento html tiene qué y cuántos eventos están asociados con él?

Más explicación a la pregunta anterior conforme a lo solicitado,

que significaba ID101 puede tener onclick, onmouseover, onmouseout y muchos otros eventos. Puede haber muchos de tales elementos con muchos de estos controladores de eventos. ¿Cómo puedo verlos? En el estilo antiguo, todos los controladores de eventos están colocados juntos, como este

<a id="id101" href="javascript:func1();" onclick="return func2();">Link</a>.

No estoy diciendo que esto sea bueno, pero al menos puedo ver que tiene este evento onclick. Pero ahora, al separar esto en un archivo jquery, tengo que buscar primero este archivo jquery para id101 y luego verificar los eventos asociados con él, lo que puede ser un problema con el archivo html que tiene muchos elementos y manejadores de eventos asociados. ¿Hay alguna forma mejor de encontrar esa información?

+0

No ponga JavaScript en el "href" en absoluto. Simplemente haga eso (condicionalmente, si lo desea) en el controlador de eventos. – Pointy

+0

@endroix: Como dijo Pointy, simplemente elimine todo el atributo 'href'. Inline JS es una mala noticia. Y, cuando se vincula con el selector jQuery, debe usar un '#' para indicar ID. En este momento, tu jQuery probablemente no haga nada. Cámbielo a '$ (" # id101 "), haga clic en();' y elimine todo 'href =" x "'. – Josh

+0

@Josh, me olvidé de eso #. Ahora actualizado – newcoderintown

Respuesta

2

Sí, te recomiendo que escribas func1 en func2. HTML:

<a id="id101" href="#" >Link</a> 

jQuery

$("#id101").click(func2() { 
    var status = false; 
    //func2 goes here and modifies status value. 
    if (status) { 
     // func1 goes here 
    } else { 
     // in case if status is false. 
    } 

}); 

Además no conseguía lo que quiere decir en la segunda parte de su pregunta, ¿podría ser más específico.

+2

Si no agrega un '#' a ese selector jQuery, nada va a funcionar ... – Josh

+0

De hecho, teóricamente no hay límite para los eventos y los controladores. Solo crea controladores para ellos. Creo que podrías usar clases en lugar de identificadores. si hay muchos enlaces que deberían tener controladores de JavaScript, intente reunirlos. como 'Link Link 2' Además, si necesita hacer un trabajo específico en todas las preguntas, le recomiendo usar otro atributo que identificará en qué enlace se hizo clic. ' Cyberon

+0

y si no desea que su página "salte" al principio haciendo clic en este enlace (porque se refiere a "#"), posiblemente podría usar algo como ' Enlace' en su lugar. simplemente diseñe este tramo que se ve como un enlace. – odaa

2

Lo mejor que puedo decir es que este es un código "maloliente", no desea tener su javascript por todas partes de esta manera. Te recomendaría que pases unas horas más aprendiendo algunos fundamentos de jQuery y sigas adelante. Sé que puede ser frustrante, especialmente si está trabajando con javascript heredado.

+0

Estoy aprendiendo jQuery en este momento. Gracias – newcoderintown

9

si he entendido bien, se quiere evitar la línea de Javascript, pero también quiere ser capaz de mirar a un a y saber si tiene un evento ligado a ella. Desafortunadamente, no hay una manera aceptable de denotar esto, ya que el Javascript en línea es una mala noticia. Tal vez puedas darle a tu elemento una clase ficticia para ayudarte en tu legibilidad futura. Aparte de eso, olvida todo lo de func1 y func2. Simplemente use una función anónima dentro de su enlace de clic.

<a id="some_id" class="optional_has_click">Click Me</a> 

<script type="text/javascript"> 
    $(document).ready(function(){ 

    $("#some_id").click(function(){ 

     // do something 
     alert($(this).attr("id")); 

    }); 

    }); 
</script> 

EDIT: Además, la eliminación de la href eliminará la señal visual, para que pueda utilizar su clase ficticia para que se vea como un a.

Aquí es un violín para usted: http://jsfiddle.net/zzTSt/1/

+0

Sí, quiero evitar JS en línea, pero también veo eventos asociados con 'a'. ¿Qué pasa si tengo que usar este func1 y func2 en muchos lugares, puedo hacerlo con una función anónima? – newcoderintown

+0

@endroix: Simplemente llame a la función dentro del anónimo, donde estoy alertando ahora mismo. – Josh

+0

@endroix: he actualizado el violín para ti. – Josh