Traté de poner mis tablas de datos en otro archivo y cargarlo a través de ajax, lamentablemente el envío del formulario ya no funciona.
Acabo de recibir el siguiente error: Uncaught TypeError: this.type is undefined , el valor de idRow aún se envía (puedo imprimirlo en la consola), por lo que en este momento no entiendo por qué dice que no está definido.
Cuando todo estaba en una sola página, lo siguiente funcionaba sin problemas:
Creación y envío de formularios después de hacer clic en el botón:
<script> function submitForm(rowid) { form = document.createElement("form"); form.action = "save_tables.php"; / form.method = "post"; form.style.display = "none"; $("#"+rowid+" td").children().each(function() { if(this.type.substring(0,6) == "select") { input = document.createElement("input"); input.name = this.name; input.type = "hidden"; input.value = this.value; form.appendChild(input); } else { $(this).clone().appendTo(form); } }); document.body.appendChild(form); form.submit(); } </script>Ejemplo para una entrada en la tabla
<tr id="entry_4" class="row100 body"> <td><input type="text" name="lang"/></td> <td><input type="text" name="l_code"/></td> <td><input type="text" name="code"/></td> <td><button onclick="submitForm('entry_4')">Change</button></td> </tr>Reemplacé la tabla con la siguiente y luego cargué las tablas a través de ajax.
<div align="center" id="selection"> <button onclick="showTables('lang')">Lang</button> <button onclick="showTables('cat')">Cat</button> </div> <div id="target"> </div> <script> function showTables(showtype) { $.get(`load_tables.php?show=${showtype}`, function(data) { $('#target').html(data); }) } </script>Encontré el problema y una solución, aunque no sé por qué sucede.
Al cargar la tabla a través de ajax, this.type no está definido para algunas entradas, así que cambié if(this.type.substring(0,6) == "select") {
a lo siguiente para que funcione:
if(typeof this.type != 'undefined' && this.type.substring(0,6) == "select") {
Todas las entradas se envían (incluso si hay una seleccionada), por lo que funciona para mí