为啥我的 JavaScript 函数显然没有被调用?

Posted

技术标签:

【中文标题】为啥我的 JavaScript 函数显然没有被调用?【英文标题】:Why is my JavaScript function apparently not being called?为什么我的 JavaScript 函数显然没有被调用? 【发布时间】:2017-02-17 05:41:51 【问题描述】:

这个 javascript 函数以前可以工作,直到我尝试将更多错误检查推到前端时使它变得更加复杂。

这里是前端代码,只是为了简洁起见的重要部分:

    <body>
        <form id="form1" runat="server">
        <div>
     <script type = "text/javascript" >
         function checkThings()
         
             var jobSeekerFirstName = document.getElementsByName('txtJobSeekerFirstName')[0].value
             var jobSeekerLastName = document.getElementsByName('txtJobSeekerLastName')[0].value
             var jobSeekerUserName = document.getElementsByName('txtJobSeekerUserName')[0].value
             var jobSeekerPassword = document.getElementsByName('txtJobSeekerPassword')[0].value
             var jobSeekerPhoneNumber = document.getElementsByName('txtJobSeekerPhoneNumber')[0].value
             var jobSeekerEmail = document.getElementsByName('txtJobSeekerEmailAddress')[0].value
             var jobSeekerAnswer = document.getElementsByName('txtJobSeekersSecurityAnswer')[0].value
             if ((jobSeekerFirstName != '') && (jobSeekerLastName != '') && (jobSeekerUserName != '') &&
                 (jobSeekerPassword != '') && (jobSeekerPhoneNumber != '') && (jobSeekerEmail != '') &&
                 (jobSeekerAnswer != '')) // First check all fields entered
             
                 if (jobSeekerUserName.length == 6) 
                     var emAddrCounter;
                     var emlength = jobSeekerEmail.length;
                     var emailCorrect = false;
                     for (emAddrCounter = 0; ((emAddrCounter < emlength) && (emailCorrect == false)) ; emAddrCounter++) 
                         var emChar = jobSeekerEmail.charAt(emAddrCounter);
                         if (emChar == '@') emailCorrect = true;
                     
                     if (emailCorrect == false) 
                         var emailNoAtChar = " Email address must contain @ character. Please reenter";
                         document.getElementsById('txtMessageBox').Text = emailNoAtChar;
                         return false;
                     
                     else 
                         return true;
                     
                 
                 else
                 
                     var userNameNotSix = " User name must be exactly six characters long. Please reenter";
                     document.getElementsByName('txtMessageBox').Text = userNameNotSix;
                     return false;
                 
             
             else
             
                 var allElementsPresent = " All Fields must be filled in first. Please reenter all fields";
                 document.getElementsById('txtMessageBox').Text = allElementsPresent;
                 return false;
             
         
    </script>
<asp:ScriptManager ID="scripman1" runat="server" EnablePageMethods="True">
</asp:ScriptManager>

电话线

 <asp:Button ID="btnNewJobSeekerRegistration" runat="server" 
             Text=" Register me as a new Job Seeker " 
             OnClientClick= "return checkThings();"
             OnClick="btnNewJobSeekerRegistration_Click" />

我一直在努力

操作完成

它似乎跳过了所有的 JavaScript 函数和其中的所有错误检查。有什么想法吗?

【问题讨论】:

你能把你的html代码也贴出来更好地理解 这可能是因为您在 javascript 上遇到了一些错误,并且在引发错误后,按钮继续回发,但您错过了它...在浏览器上打开控制台以查看错误是什么 您的 JavaScript 充满了错误。尝试在没有 asp.net 按钮的情况下对其进行调试,这样就不会有 PostBack。 @VDWWD 您的 JavaScript 充满了错误并不能告诉我这些错误是什么。你能指定一个你在那里看到的错误吗?如何在没有 asp.net 按钮的情况下调试它?我的想法是它根本没有被调用,而不是有错误。我会看的。 我看到的唯一“错误”是javascript中的var语句没有以这个符号“;”终止我返回并正确终止了它们,仍然没有调用该函数的相同行为,它直接进入后端代码隐藏函数以在不执行 JavaScript 的情况下执行它。我觉得很奇怪。 【参考方案1】:

当您的 JavaScript 代码“未被调用”时,通常是因为它有问题。当 JavaScript 的任何行抛出异常时,记住这段 JavaScript 代码不是编译而是在运行时立即解释和执行时,我猜它下面的每一段代码都会被简单地跳过,后端的代码隐藏会自动执行。要调试它,您需要在浏览器的调试器中打开开发者控制台。对我来说这是 Chrome,所以请转到:自定义和控制 Google Chrome/更多工具/开发者工具(或 Ctrl + Shift + i) ,然后转到控制台。现在从 Visual Studio 中运行您的代码,并观察 JavaScript 代码中引发的异常或错误。对我来说,这个错误是“JobSeekerRegistration.aspx:100 Uncaught TypeError: document.getElementsById is not a function”。然后我所做的就是将我的两行代码中的 document.getElementsById 更改为 document.getElementsByName ,瞧,它起作用了。特别感谢 Aristos,但我的回答是最好的。

【讨论】:

以上是关于为啥我的 JavaScript 函数显然没有被调用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 javascript 调用回发并且我没有错误?

为啥我的复选框更改事件没有被触发?

为啥我的构造函数没有被调用?

vue.js test-utils 为啥我的 onSubmit 函数 mock 没有被调用?

在 JSX 中调用 javascript 函数:为啥在没有 () 的情况下调用函数?

javascript 函数在函数所在的script标签下为啥不能被调用