Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

105
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!