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

104
Vistas
How to Prevent Javascript Function Firing When ASP.NET Validation is Used

I'm calling a JavaScript DOM button click event to execute some code. However, I first need to validate if a textbox has a value in it. So, I'm using ASP.NET's RequiredFieldValidator control to validate the textbox. It works in that it will display an error message when the textbox is empty, however, the associated JavaScript button click event still fires.

How to do I prevent the JavaScript function from firing when I use an ASP.NET validation control?

By the way, I know I can use validation within JavaScript, but I'm hoping not to do that and just use ASP.NET validation controls only.

Here is my code (it's exactly how used with all the fluff removed):

<%@ Page Language="VB" blah... %>
<!DOCTYPE html>
<html lang="en">
<head runat="server">
</head>
<body>
    <form id="form1" runat="server">
        <asp:Button ID="MyButton" runat="server" Text="Click Me" />
        <asp:TextBox runat="server" ID="MyTextBox"></asp:TextBox>
        <asp:RequiredFieldValidator runat="server" ID="MyRequiredFieldValidator" ControlToValidate="MyTextBox" Display="Dynamic" Text="*" ErrorMessage="The field is required.">
            Required
        </asp:RequiredFieldValidator>
    </form>

    <script type="text/javascript">
        $(document).ready(function () {
            const vMYBUTTON = document.querySelector('#MyButton');

            SomeKindOfPluginObject.dom.addEvent(vMYBUTTON, 'click', function () {
                console.log('Function started.');
                console.log('My code executed.');
                console.log('Function ended.');
                event.preventDefault();
            });
        });
    </script>
</body>
</html>

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

0

The issue is that the form submit is a click event, which is separate from the button click event.

Both of those events enter the queue one right after the other.

When the form is submitted, the server returns the required field error, then the next click event is processed which happens to be the JavaScript that you don't want to be called.

The server will need to render a page without the script until there are no errors

<!DOCTYPE html>
<html lang="en">

<head runat="server"></head>

<body>

    <!-- /////////////////////////////////////////////////////////////
    // Both the button click, and the JavaScript click events are
    // triggerd when the form returns an error
    ///////////////////////////////////////////////////////////////-->
    <form id="form1" runat="server">

    <!-- /////////////////////////////////////////////////////////////
    // When this button is clicked, it fires its own click event
    ///////////////////////////////////////////////////////////////-->
    <asp:Button ID="MyButton" runat="server" Text="Click Me" />

    <asp:TextBox runat="server" ID="MyTextBox"></asp:TextBox>
    <asp:RequiredFieldValidator runat="server" ID="MyRequiredFieldValidator" ControlToValidate="MyTextBox" Display="Dynamic" Text="*" ErrorMessage="The field is required.">
      Required
    </asp:RequiredFieldValidator>
  </form>

  <script type="text/javascript">
    $(document).ready(function() {
      const vMYBUTTON = document.querySelector('#MyButton');

      /////////////////////////////////////////////////////////////
      // This event will fire because it is an
      // additional click event that you are adding
      /////////////////////////////////////////////////////////////
      SomeKindOfPluginObject.dom.addEvent(vMYBUTTON, 'click', function() {
        console.log('Function started.');
        console.log('My code executed.');
        console.log('Function ended.');
        event.preventDefault();
      });
    });
  </script>
</body>

</html>

You could do something simple to control the behavior by adding a variable to track the status of the form.

///////////////////////////////////////////////////////////////
// This event will be ignored until the server returns success
///////////////////////////////////////////////////////////////
SomeKindOfPluginObject.dom.addEvent(vMYBUTTON, 'click', function() {
  if (someVariableSetOnTheServer == "invalid form") {
    return;
  }
  console.log('Function started.');
  console.log('My code executed.');
  console.log('Function ended.');
  event.preventDefault();
});

Another method would be to use the .NET JavaScript API to only run the code when Page_ClientValidate() returns true

if (Page_ClientValidate()) {
  // run your code here
}
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