为什么我得到 Uncaught ReferenceError: Delete is not defined at HTMLButtonElement.onclick 如果已经定义?

时间:2021-07-07 16:52:06

标签: javascript php html

我只是创建了一个名为 Delete() 的 onclick 函数,但我不知道为什么,我得到 Detele() 未定义,但确实如此。

我的 onClick 函数在我的按钮中:

$data->acción = "<div class='text-center'><div class='btn-group'><button id='modificar_$data->id' class='btn btn-primary btn-sm btnEditar' value='edit'><i class='material-icons'>edit</i></button><button onclick='Delete($data->id, $tableName, $field)' class='btn btn-danger btn-sm btnBorrar'><i class='material-icons' value='delete'>delete</i></button></div></div>"; 

还有我的功能:

function Delete(id, tableName, field){
    //$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/res/?action=deleteRegistro&tabla=" + tabla + "&nombre_campo=" + campo + "&id=" + id, function(data){
    $.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/", {
        action: "deleteRegistro",
        id: id,
        tableName: tableName,
        field: field
        }, function (data, status) {

        if (confirm("¿Estás seguro que deseas borrar el registro?") == true) {
            if (status === 'error') {
                console.log("Not deleted"); // For debugging purpose
            } else if (status === 'success') {
                console.log("Deleted successfully");                                
            }
        }
        else {
            return false;
        }
    });
}

这是我的完整代码:

<?php

use GuzzleHttp\json_decode;
include_once(DIR_PLUGINS.'/alexcrudgenerator/main.php');

    $test = new GenerateCrud($_POST['tableName'], $_POST['id'], $_POST['tableFields']);
    
    if ($_GET['action']){
        print_a($_GET['action']);
    }

    switch($_POST['action']){
        
        case 'datosTabla': // OK.
            
            //print_r($_POST['action']);
            $res = json_decode($_POST['datos']);
            echo json_encode($res, JSON_UNESCAPED_UNICODE);
            
            break;
        
        case 'deleteRegistro':
            
            $id = $_POST['id']; // Quiero obtener estas variables que he enviado desde la función Delete();
            $tableName = $_POST['tableName']; // Quiero obtener estas variables que he enviado desde la función Delete();
            $field = $_POST['field']; // Quiero obtener estas variables que he enviado desde la función Delete();
            
            break;
            
        case 'showtable': // OK.

            $res = getEntireTable($_POST['tableName'], $_POST['id'], $_POST['tableFields']);
            $tableName = $_POST['tableName'];
            
            $field = json_decode($_POST['tableFields'],1)[0];
            //print_r($tableName);
            //print_r('<br>');
            //print_r($campo);
            
            foreach ($res as $data){                
                $data->acción = "<div class='text-center'><div class='btn-group'><button id='modificar_$data->id' class='btn btn-primary btn-sm btnEditar' value='edit'><i class='material-icons'>edit</i></button><button onclick='Delete($data->id, $tableName, $field)' class='btn btn-danger btn-sm btnBorrar'><i class='material-icons' value='delete'>delete</i></button></div></div>"; 
                $resultados['data'][] = $data;
            }           
            
            $resultados = json_encode($resultados); // 7 PROPIEDADES
            
            foreach(json_decode($_POST['tableFields']) as $columnsDB){
                $fields[] = array('data'=>$columnsDB);
            }

            $fields[]['data'] = 'acción';
            $fields = json_encode($fields);
            
?>
            <head>
                <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
            </head>
            
            <div class="container caja">
                <div class="row">
                    <div class="col-lg-12 col-sm-12">
                        <div>
                            <table id="tablaUsuarios" class="table table-striped table-bordered table-condensed hover" style="width:100%" >
                                <thead class="text-center">
                                    <tr>
                                        <?php
                                            foreach (json_decode($_POST['tableFields']) as $columnsTH){
                                                 echo '<th>' . strtoupper($columnsTH) . '</th>';
                                            }
                                            echo '<th>ACCIÓN</th>';
                                        ?>
                                    </tr>
                                </thead>
                                <tbody>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </div>

            <script>
                    
                $(document).ready(function() {
                    var datos= <?=$resultados?>;
                    var dynamicColumns = <?=$fields?>;
                    datos = JSON.stringify(datos);
                    
                    $('#tablaUsuarios').DataTable({
                        "language": {"url": "https://cdn.datatables.net/plug-ins/1.10.25/i18n/Spanish.json"},
                        "paging": true,
                        "lengthChange": true,
                        "searching": true,
                        "info": true,
                        "autoWidth": true,
                        "scrollX": true,

                        "ajax":{
                            "url": '<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/',
                            "method": 'POST',
                            "data":{action: "datosTabla", datos: datos}
                        },

                        "columns": dynamicColumns
                    });

                    function Delete(id, tableName, field){
                        //$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/res/?action=deleteRegistro&tabla=" + tabla + "&nombre_campo=" + campo + "&id=" + id, function(data){
                        $.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/", {
                            action: "deleteRegistro",
                            id: id,
                            tableName: tableName,
                            field: field
                            }, function (data, status) {
        
                            if (confirm("¿Estás seguro que deseas borrar el registro?") == true) {
                                if (status === 'error') {
                                    console.log("Not deleted"); // For debugging purpose
                                } else if (status === 'success') {
                                    console.log("Deleted successfully");                                
                                }
                            }
                            else {
                                return false;
                            }
                        });
                    }
                })
            </script>
<?php
        break;      
}
?>

编辑: 我收到此错误 Uncaught ReferenceError: users_test is not defined at HTMLButtonElement.onclick,其中 users_test 是我的 $tableNametableName 的值。

1 个答案:

答案 0 :(得分:1)

我猜你会得到那个错误,因为 Delete() 函数是在

中定义的
select 
        CASE ColumnName
        WHEN 'enter value on which you want to execute Than Block'
        THEN
            CASE ColumnName
            WHEN 1 THEN 'return value or Column Name'  
            ELSE   'return value or Column Name in case of else' 
            END
        WHEN 'another condition, value of column on which you want to execute then block'
        THEN  
            CASE WHEN 'Condition etc => ColumnName > 5 or ColumnName ='abc' ' THEN 'return value or column name' ELSE 'return value or column name' END
        ELSE 'return value or column name'
        END as status
    FROM TableName

您在那里编写的每个函数都是本地的,只能从 document.ready 函数中调用

  • 所以,这行不通

$(document).ready(function() {

});
Delete();     

$(document).ready(function() {
    function Delete(){             //function inside
        console.log("Erase");
    }
});

  • 这应该有效

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Delete();    

function Delete(){           //function outside
    console.log("Erase");
}

$(document).ready(function() {
    //your code
});