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

165
Vistas
javascript anteponiendo una acción a una función que está vinculada a un evento

Tengo una página con un botón, tengo un enlace en el botón que ejecuta algunas llamadas ajax y envía algunos datos.

El código con el enlace es bastante genérico y se reutiliza en varios otros puntos de la aplicación. Entonces no puedo cambiar su comportamiento actual (podría cambiarlo de una manera que no afecte a otros usuarios de esto).

Ahora tengo un requisito para cambiar el comportamiento de una de las páginas que usan este enlace (es decir, no debería cambiar el binge de una manera que rompa las otras páginas).

Ahora necesito el botón en una página específica para no enviar los datos en caso de que no se cumplan algunas otras condiciones. (en específico, en lugar de enviar, necesito mostrar un modal, con una doble verificación si realmente quieren completar el envío)

Hice un fragmento ejecutable que lo explica:

 $('button').click(function (e) { $('ul').append('<li>submitting data</li>'); }); $('button').click(function (e) { if($(this).data('value') != 'ready') { $('ul').append('<li>condition not met, data not submitted</li>') } });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <p> When the button is clicked, I want the data to be submitted only if the condition is not met. </p> <p> In this example I need 'condition not met' to be printed, and not 'submitting data'. </p> <button data-value='not-ready'> content </button> <ul> </ul>

Necesito que esta página específica no envíe los datos en caso de que no se cumpla la condición.

¿Cómo podría conseguir esto?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

No estoy seguro de si esto es lo que está buscando, hecho con la suposición de que es posible que no desee cambiar la estructura del HTML del botón. Puede configurar uno de sus contenedores externos para algo que pueda probar, y luego, en ese sentido, también puede configurar una función de validación dinámica para solicitar el botón dentro del contenedor.

 $('button').click(function(e) { if ($(this).closest('.validate-extra').length > 0) { if ($(this).closest('.validate-extra').data('fn')) { return window[$(this).closest('.validate-extra').data('fn')](); } else { console.error('no special validation function in scope!'); } } else $('ul').append('<li>submitting data</li>'); }); function val1() { console.log('running function val1()'); }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <p> When the button is clicked, I want the data to be submitted only if the condition is not met. </p> <p> In this example I need 'condition not met' to be printed, and not 'submitting data'. </p> <button data-value='not-ready'> content </button> <div class='validate-extra' data-fn='val1'> <button data-value='not-ready'> content </button> </div> <ul> </ul>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Siguiendo la sugerencia de @aleksG en los comentarios, terminé con bastantes cambios, pero principalmente:

  • mueva el código que realiza el envío de datos a una función, que se puede llamar desde cualquier lugar
  • hacer que cada una de las páginas que usan esa función cargue el enlace de forma independiente (el enlace estaba allí globalmente antes)
  • tener un nuevo enlace en una nueva clase css que maneje las validaciones antes (eventualmente) de llamar al envío del código

Esto funcionó y se ve bastante limpio.

Gracias.

about 4 years ago · Juan Pablo Isaza 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