按钮上附加的Javascript代码无法执行。需要帮助调试

时间:2019-05-03 17:00:24

标签: javascript html

我写了一个带有文本字段的html页,可以在其中输入文本,单击按钮,应将包含输入文本的电子邮件发送到预定的电子邮件地址。

页面在Firefox和Chrome中按预期显示,但是单击该按钮时,没有任何反应。

function sendEmail(adress) {
  Email.send("Sender@email.com", "Receiver@email.com", "subject", adress, "smtp.email.com", "Sender@email.com", "pAssWoRd", function done(message) {
    alert("Email sent successfully")
  });
}
<!DOCTYPE html>
<html>

<body>
  <script src="smtp.js"></script>
  <form action="/action_page.php">

    <p>TEXT</p>
    <p>TEXT</p>
    <p>TEXT</p>
    Enter text here: <input type="text" name="fname"><br>
    <input type=button onClick="sendEmail(fname.value);" value='send'>


  </form>

</body>

</html>

该按钮应该发送电子邮件并显示“电子邮件发送成功”警报消息。您能帮我调试此代码吗?

3 个答案:

答案 0 :(得分:1)

尝试将警报或日志记录到控制台内部功能中。我可以毫无问题地调用sendEmail函数。您的代码唯一的问题是额外的脚本标签</script>

代码:

function sendEmail(adress) {
  alert("Inside sendEmail function");
  Email.send("Sender@email.com", "Receiver@email.com", "subject", adress, "smtp.email.com", "Sender@email.com", "pAssWoRd", function done(message) {
    alert("Email sent successfully")
  });
}
<!DOCTYPE html>
<html>

<body>
  <script src="smtp.js"></script>
  <form action="/action_page.php">

    <p>TEXT</p>
    <p>TEXT</p>
    <p>TEXT</p>
    Enter text here: <input type="text" name="fname"><br>
    <input type=button onClick="sendEmail(fname.value);" value='send'>

  </form>

</body>

</html>

答案 1 :(得分:1)

没有smtp.js这样的依赖项,我们无法真正调试它,但是我可以教你如何钓鱼,我的意思是调试JavaScript。

知道如何在JS中正确调试可以使您的生活更加轻松。

如果下面的技巧对您来说太难了,那么您可以随时使用good'ol console.log来查看代码的运行方式;使用较少的上下文和选项,速度会慢得多。就像其他人所说的那样,您可以使用经典的alert来查看代码是否到达了您期望的位置。如果您不断刷新并尝试进一步调试,那么单击警报就变得很痛苦。

注意:您可能还试图使用节点/服务器端代码发送电子邮件。如果是这种情况,那么它将无法在客户端运行。似乎您正在尝试使用一个库,该库应该允许您在客户端使用它。

警告:将电子邮件服务器密码传递给客户端很危险,因为现在他们已经有了您的凭据。此代码应在服务器端发生。客户端可以在服务器上命中一个端点,然后该端点将启动代码以从服务器发送电子邮件。

如何在Chrome中调试JS

  1. debugger;放在您希望代码中断的位置。
    • 对于您的情况,我会尝试在Email.send上方扔一个。
  2. 确保您已打开Chrome检查器(右键单击页面>检查)
  3. 如果您试图中断不是事件触发的代码,或者错过了页面加载事件之类的事件,则可能要刷新页面。
  4. 当您点击debugger;语句时,代码应暂停。
    • 如果不这样做,则意味着该代码从未进入您的debugger语句,或者您已关闭断点。
    • 下图中的按钮显示“停用断点”按钮。 deactivate breakpoints button
  5. 您现在应该在窗口顶部看到以下“已在调试器中暂停”: paused in debugger notification
  6. 该代码现已冻结在debugger语句中。现在,您将可以访问当前的调用堆栈,作用域/变量以及其他有用的调试工具。
    • 如果要查看当前状态,可以键入控制台并在其中运行代码片段。例如,如果有一个变量,则可以在控制台中将其键入以查看其值,或者可以在“作用域”面板中找到它。
    • 您可以控制代码的执行。
      • 您可以单击“继续/播放/继续”按钮以继续执行代码。当您希望在当前断点之后再命中另一个断点时,这也很有用。
      • 您可以单步执行代码,也可以单步执行代码。
        • 如果要转到下一行,可以使用step
        • 如果有不想调用的函数,可以使用step over next function call
        • 如果要进入正在调用的函数,可以使用step into next function call
        • 如果您进入某个函数并想退出该函数,则可以使用step out of current function。当您进入不知道发生了什么并且根本不关心它的第三方图书馆时,这很有用。
        • 如果确实不关心脚本文件,则可以右键单击Sources标签中的源代码,然后选择Blackbox script

随机提示

  • 有时,调试不在html文件中的代码会更容易,因此请将其移到自己的js文件中。
  • 如果可以,最好不要缩小要调试的文件。
    • 如果要编译文件,则应该能够生成一个source map,它将缩小的代码映射回原始代码。 Chrome会向您显示原始代码,并让您在其中设置断点,而不是尝试使用缩小版本。仍然有一些代码部分无法100%转换,因此您可能无法始终打破期望的位置。
      • 如果您的翻译过程中使用了变量名,可能会有一些警告,那么您可能无法直接在控制台中键入它们并访问它们;您可能无法使用最小的变量名,这可能会造成混淆。我不记得Chrome是否已经解决了这个问题。
  • 在文件上时,您可以单击“源”窗格中装订线中的数字,以设置该行的断点。您还可以单击代码内的蓝色幻影箭头,以在某些代码上设置列断点。
  • 这些技巧也可以在Firefox上使用。如果您使用的是较旧的浏览器,则可以查看Firebug之类的东西,它可以让您以几种不同的方式将调试框架注入页面。

答案 2 :(得分:-1)

第一件事。 1.您还有一个额外的结束脚本标签 2.让您的输入类型提交 3.您的表单操作可能应该是action =“ mailto:emailfrom ... method =” post“>