Error Uncaught ReferenceError $ is not defined

publicado por: Anonymous

Tengo este codigo, donde me marca error en esta linea $(‘#delete-contrato-select’).on(“click”, function()

_x000D_

_x000D_

function deleteCbContrato(id_tipo_contrato){     _x000D_
             _x000D_
_x000D_
        $('#id_tipo_contratoDelete').val(id_tipo_contrato );           _x000D_
        _x000D_
        $('#myModalDelete').on('shown.bs.modal', function () {_x000D_
            $('#myInput').focus()_x000D_
        });   _x000D_
}_x000D_
_x000D_
_x000D_
$('#delete-contrato-select').on("click", function(){_x000D_
_x000D_
var r=$('#id_tipo_contratoDelete').val();_x000D_
_x000D_
var parametros = {_x000D_
                "r_delete" : r_x000D_
        };_x000D_
        $.ajax({_x000D_
                data:  parametros,_x000D_
                url:   'includes/funciones_catalogos.php',_x000D_
                type:  'post',_x000D_
                beforeSend: function () {_x000D_
                        _x000D_
                },_x000D_
                success:  function (response) {_x000D_
location.reload();_x000D_
                }_x000D_
        });_x000D_
 });

_x000D_

_x000D_

_x000D_

solución

Estás utilizando $ que usualmente es la variable global que jQuery fija cuando lo cargas, por ejemplo, usando:

<html>
   <head>
      <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
      <script>
         ... tus funciones // supongamos que esto es el script de tu pregunta
      <script>
   </head>
   <body>
      ... shake your body ...
   </body>
</html>

Si no tienes $ en el ámbito global, tu script va a tirar ese error.

Supongamos por ejemplo que tienes el siguiente código

var ManipulaDOM = function() {
      this.borraElemento = function(selector) {
          $(selector).remove();
      };
};

eso no tira ningún error. Pero si haces:

var manipulador = new ManipulaDOM();

manipulador.borraElemento('#mi_div');

El intérprete de javascript va a invocar borraElemento. Adentro se encuentra con $ que no está definida dentro de borraElemento. Sigue buscándola subiendo en el Stack. Pero tampoco está definida en ManipulaDOM. Sigue subiendo por el stack hasta que llega al ámbito global, y si resulta que window.$ no está definido, entonces arroja ese error.

Pese a que la mayoría de los sitios web que usan jQuery lo ponen en el <head> del documento, también es posible ponerlo al final del <body> (por todas esas buenas prácticas que explican que los scripts son bloqueantes y demoran la carga del DOM). Tú podrías hacer:

<body>
    <div id="mi_div">hola</div>
    <script>
        var ManipulaDOM = function() {
              this.borraElemento = function(selector) {
                  $(selector).remove();
              };
        };
    </script>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script>
        var manipulador = new ManipulaDOM();

        manipulador.borraElemento('#mi_div');
    </script>
</body>

Y eso no arrojaría error, porque cuando declaras lo primero, todavía no ocupas $ y cuando lo invocas, a esa altura $ ya está en el ámbito global.

Raya para la suma: asegúrate de que jQuery se ha cargado antes de usar funciones que usan $. Y si esas funciones manipulan el DOM, también asegúrate de envolver todo el bloque en $(document).ready(function() { ... }); o cualquiera de sus variantes.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *