Soy nuevo en la codificación y estoy tratando de crear un botón para usar bootstrap 5 para eliminar un cliente de una base de datos sql.
Estoy usando tablas de datos y el botón se forma así:
<li><button class="dropdown-item testing" name= ' + item.client_id + ' aria-label="delplan" type="button"><i class="far fa-trash-alt styleicon"></i>Verwijder</button></li>Estoy usando el siguiente script para recuperar para abrir el modal con bootbox y obtener la ID de la etiqueta de nombre en mi botón.
$(document).ready(function(){ var table = $('#clientTable').DataTable(); $("#clientTable").on("click", ".testing", function () { var id = $(this).attr('name'); console.log(id); // this is correctly showing the id in the console ! bootbox.confirm({ title: "Verwijder client?", message: "Weet je zeker dat je deze client wilt verwijderen van de database?", buttons: { cancel: { label: '<i class="fa fa-times"></i> Cancel' }, confirm: { label: '<i class="fa fa-check"></i> Confirm' } }, callback: function (result) { var id = $(this).attr('name');// the post is empty and the console says undefined, so tried to get it here to, but still undefined. var p = loadPrompt(); if(result === false){ console.log('clicked no: ' + id); // console log clicked no undefined.. p.inform('Client is niet verwijderd!'); } else{ console.log('clicked yes: ' + id); // console log clicked yes undefined.. $.ajax({ type: "POST", url: "client_delete_client.php", data: {id: id}, // post request is happening in network tab but no data is send?? success: function(data) { $('#clientTable').DataTable().ajax.reload(); p.success('Client is succesvol verwijderd! '); }, error: function(xhr, status, error) { alert("ERROR : Something went wrong! Try again our contact the database administrator" + error); p.error('Fout in het verwijderen van client !'); } }); } } }); }); }); </script> No entiendo por qué mi secuencia de comandos no publica la var id en la url client_delete_client.php después de que el cliente hizo clic en Sí. Espero que haya alguien aquí que pueda ayudarme. ¿Porque la identificación se registra en la consola al principio, pero después de eso no está definida?
El problema es uno de alcance de JavaScript. Dentro de su función de devolución de llamada, this se refiere a otra cosa, probablemente la función de devolución de llamada en sí, pero un console.log(this) lo confirmaría.
La solución es crear una referencia a su botón justo después del evento de clic:
$("#clientTable").on("click", ".testing", function () { const btn = this; } luego consulte btn en otra parte de su código
const id = $(btn).attr('name'); Le recomiendo que lea un poco sobre el alcance en JavaScript, particularmente sobre cómo afecta this variable (pero también otras variables) porque es algo que hace tropezar a muchos desarrolladores.