Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

372
Vistas
Usando jQuery para activar el evento html onclick

tengo algunos elementos

 <input type="text" id="test_value" name="test_value" value="xyz" /> <input id="test_default" name="test_default" type="checkbox" onclick="with(this.form.elements['test_value']) { disabled = this.checked; if (this.checked) { value = ''; } else {if(value=='') {value=' '; value = '';}}};" />

El onclick en línea es generado por un CMS del que no tengo control. Quiero ejecutar $("#test_default").click(); con jQuery pero eso no funciona porque no está vinculado al administrador de eventos jQuery.

He estado probando variaciones de:

 $("#test_default").click(function (e) { $(e.target).attr("onclick").apply(checkbox, [e]); return false; }).click();

pero sin provecho. Por favor ayuda.

Hay docenas de funciones diferentes que pueden estar en línea en onclick . Realmente no es una opción duplicarlos y ejecutarlos en paralelo.

Las respuestas funcionan en una pequeña demostración pero no en el entorno en vivo. Mire http://jsfiddle.net/GtJjt/ Necesito que la casilla de verificación se active mediante programación.

Extrañamente solo $("#metadata_field_text_10190_default")[0].click(); desencadena el evento correctamente. ¿Alguien puede explicar esto?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Llame directamente al onclick del DOM nativo ( ver demostración ):

 $("#test_default")[0].onclick();

O, sin jQuery en absoluto,

 document.getElementById("test_default").onclick();

Actualizar:

El problema real es con la interacción entre .click() de jQuery y el código onclick en línea. .click() de jQuery en realidad hace dos cosas: primero activa cualquier controlador de eventos, incluido el código onclick en línea, luego hace que la casilla de verificación se marque.

El problema surge porque el código en línea prueba si la casilla de verificación está marcada. Debido a que esto se activa primero, el código encuentra que la casilla de verificación no está marcada y no hace nada. Ahora, después de que esto haya terminado, jQuery va y marca la casilla de verificación.

¿Cómo arreglamos esto? Marcamos la casilla de verificación manualmente primero, luego llamamos al controlador en línea. Desafortunadamente, no podemos usar .click() de jQuery para llamar al controlador en línea, porque desmarcará la casilla de verificación nuevamente (también llamará a otros controladores de eventos vinculados a jQuery si los agrega en el futuro, probablemente no quiera ese). Por lo tanto, usamos el método DOM nativo que describí anteriormente, ya que su único efecto es ejecutar el código en línea.

El código final es este:

 $("#metadata_field_text_10190_default").attr("checked", true)[0].onclick();

Ver demostración: http://jsfiddle.net/GtJjt/3/ . (Incluí un console.log en el código en línea para la demostración para demostrar que el código en línea se estaba ejecutando. Elimínelo si su navegador no es Firefox o Chrome o se bloqueará).

Actualizar de nuevo :

No vi tu solución antes Simon, gracias por recordarme [0].click() . Esencialmente, es el equivalente nativo de .click() de jQuery y funciona porque hace lo que describí anteriormente (marcando primero la casilla de verificación y luego llamando al código en línea). Sin embargo, una advertencia: esto también llamará a cualquier controlador de eventos vinculado con jQuery, que puede no ser lo que desea.

over 4 years ago · Santiago Trujillo Denunciar

0

Simplemente no return false y se llamará:

 $("#test_default").click(function (e) { //hi! }).click();

Si desea evitar una acción predeterminada, use e.peventDefault() en su lugar, que no eliminará el evento. Además, con respecto a su controlador onclick en línea (¿por qué no hacerlo todo discretamente?), recomiendo enfáticamente no usar with .

over 4 years ago · Santiago Trujillo Denunciar

0

Usé el disparador en html con el evento onclick de la siguiente manera:

 $("#test_default").trigger("onclick");
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda