【问题标题】:onsubmit not executing JavaScript functiononsubmit 不执行 JavaScript 函数
【发布时间】:2018-08-11 00:21:12
【问题描述】:

我正在尝试调用无法识别的函数。我有一个 PHP 代码块,可以在用户登录时将表单添加到 HTML:

<?php
if(isset($_SESSION['user'])) {
  $usr = $_SESSION['user'];
  echo("<form onsubmit=\"nbpost('#nbpost','$usr'); return false;\">\n");
  echo("<textarea id='nbpost' placeholder='Create a post...'></textarea>\n");
  echo("<button type='submit'>SUBMIT</button>\n");
  echo("</form>\n");
}
?>

我把我的 JavaScript 放在那个 HTML 下面。根据 W3Schools 的说法,该脚本与它的执行方式无关。另外,我试过无数次在脚本置顶时执行脚本,也没有结果。

另外,我之前将代码放在单独的脚本中,但我已经把它拿出来看看是否是问题所在。

这是带有生成 HTML 示例的脚本:

<form onsubmit="nbpost('#nbpost','$usr'); return false;">
  <textarea id='nbpost' placeholder='Create a post...'></textarea>
  <button type='submit'>SUBMIT</button>
</form>

<script type="text/javascript">

const nbpost = function(element, name) {

  alert("WORKING");
  name[0] = name[0].toUpperCase();
  const msg = $(element).val;
  console.log(name, msg);

  $.ajax({
    url: "http://rmpc/php/nbpost.php",
    method: "POST",
    data: {
      name: name,
      notice: msg
    }
  });
  
};

</script>

每当我执行代码时,它只会在控制台中显示:

Uncaught TypeError: nbpost is not a function at HTMLFormElement.onsubmit (index.php:54)

怎么了?

【问题讨论】:

  • 这可能是处理范围的问题,即使用const nbpost = functionfunction nbpost。有一个很棒的 SO Answer 解释范围问题,但我会尝试将您的函数声明为 function nbpost(element,name){} 看看会发生什么。
  • 我之前尝试过函数 nbpost,所以很遗憾这不是问题
  • 表单提交了吗?
  • @nicolascolman 确实如此

标签: javascript html


【解决方案1】:

我会尝试更好地分离您的内容,这样可以减少混乱。在启用 jQuery 的情况下试一试。

<?php
      if(isset($_SESSION['user'])) {
          $usr = $_SESSION['user']; ?>
          <form id="form" method="post">
          <textarea id='nbpost' placeholder='Create a post...'></textarea>
          <input type="hidden" name="user" value="<?=$usr;?>">
          <button type='submit'>SUBMIT</button>
          </form>
          <?php
      }
?>

这需要放在文档的底部。你也可以把 JavaScript 放在一个单独的文件中,当然可以通过文件名来调用它。

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
$("#form").on("submit", function (e) {
  e.preventDefault();
  var name = $("input[name=user]").val().toUpperCase();
  var msg = $("#nbpost").val();
  console.log(name, msg);

  $.ajax({
    url: "http://rmpc/php/nbpost.php",
    method: "POST",
    data: {
      name: name,
      notice: msg
    }
  });
});

</script>

看看这是否适合你。

【讨论】:

  • 啊,谢谢。这是我通常很糟糕的事情,保持整洁。另一个我完全不知道的解决方案对我有用,只是重命名了函数。无论如何,谢谢你,我应该保持我的代码干净
  • 不用担心,很高兴您找到了适合您的答案。我通常不使用内联 JavaScript,所以我什至没有注意到 ID 与函数名称相同。很高兴它现在可以工作了
【解决方案2】:

更改函数名称nbpost,使其与textarea id='nbpost'不匹配

CodePen

【讨论】:

  • 永远不会想到这一点。救生员。谢谢
【解决方案3】:

你应该将你的提交事件声明为一个完整的函数

onsubmit=\"function(){nbpost('#nbpost','$usr'); return false;}\"

【讨论】:

  • ...也可以调用它
  • 全新一期:返回语法错误:unexpected token (
猜你喜欢
  • 2012-08-02
  • 1970-01-01
  • 2011-08-30
  • 2017-09-01
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多