Estoy tratando de llamar a una función que no se reconoce. Tengo un bloque de código PHP que agrega el formulario al HTML cuando el usuario inicia sesión:

<?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");
}
?>

Puse mi JavaScript debajo de ese HTML. Según W3Schools, el script no tiene nada que ver con cómo se ejecuta. Además, he intentado innumerables veces ejecutar el script cuando el script estaba en la parte superior, sin resultado tampoco.

Además, anteriormente tenía el código en un script separado, pero lo saqué para ver si ese es el problema.

Aquí está el script con un ejemplo del HTML generado:

<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>

Cada vez que ejecuto el código, simplemente dice en la consola:

TypeError no capturado: nbpost no es una función en HTMLFormElement.onsubmit (index.php: 54)

Que esta mal

2
RWN 2 mar. 2018 a las 21:11

3 respuestas

La mejor respuesta

Cambie el nombre de la función nbpost para que no coincida con textarea id='nbpost'

CodePen

5
abbaf33f 2 mar. 2018 a las 18:34

Intentaría separar mejor tu contenido, puede hacerlo menos confuso. Prueba esto con jQuery habilitado.

<?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
      }
?>

Esto debe ir al final de su documento. También puede poner el JavaScript en un archivo separado y llamarlo por nombre de archivo, por supuesto.

<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>

A ver si esto funciona para usted.

1
Justin Duncan 2 mar. 2018 a las 18:37

Debe declarar su evento de envío como una función completa

onsubmit=\"function(){nbpost('#nbpost','$usr'); return false;}\"
0
Stéphane Ammar 2 mar. 2018 a las 18:16