javascript - quitar - No se detectó TypeError: no se puede llamar al método ''toLowerCase'' de undefined
undefined javascript error (4)
Me encontré con un error muy vago al hacer alguna manipulación simple de DOM jQuery.
La línea que desencadenó el error es la siguiente:
$(this).closest(''tr'').remove();
El error, como se indica en el título, es:
No se detectó TypeError: no se puede llamar al método ''toLowerCase'' de undefined
en el archivo: jquery-1.6.2.js
.
Ya probé con jQuery 1.6.3 y jQuery 1.5.1, pero nada cambió. Sigo recibiendo el error.
La línea de arriba está vinculada a un botón que, al hacer clic, envía una solicitud AJAX POST, luego, cuando tiene éxito, elimina su propia <tr>
. Ya lo he intentado de otra manera haciendo:
$(this).parent().parent().remove()
pero para mi sorpresa, esto no hizo nada.
Estoy usando Chrome, en caso de que importe, pero me sale el mismo error en FF.
EDITAR:
Este es mi código:
$(".remove").live(''click'', function(e) {
var str = $(this).attr(''id'').match(//[(.*?)/]/[(.*?)/]/);
var type = str[1];
var id = str[2];
// IF I PUT THE remove() HERE, IT WORKS.
$.ajax({
type: ''POST'',
url: ''/admin/ajax_remove_event_detail'',
data: {type: type, id: id},
success:function(res) {
if(res)
{
$(this).closest(''tr'').remove();
// this gives me an error
}
else
{
// error handling
}
}
});
e.preventDefault();
});
Si pongo el remove () fuera de if en algún lugar, funciona. ¿Por qué no funciona cuando está dentro de la llamada ajax / si? ¿No tiene ningún sentido para mí? :(
¿Alguna ayuda aquí? Gracias por adelantado.
Dentro de su solicitud, $ (esto) no es el elemento .remove
. Es un problema de cierre.
Así que puedes asignar $ (esto) a una variable antes y llamarla después
No sé cuál espera que sea el valor de this
en su manejador de "éxito", pero apuesto a que no es lo que piensa. Guarde this
fuera de la llamada "$ .ajax ()":
var clicked = this;
$.ajax(
// ...
success: function(res) {
if (res) {
$(clicked).closest(''tr'').remove();
}
else {
// ...
}
}
);
Obtuve exactamente el mismo error en la solicitud $ .get () .
Para mí este es el error más extraño en jQuery (mi versión 1.8.3).
Mi razón para este error fue el elemento TD con el ID establecido en "nombreNodo" .
Después de cambiar el valor de ID a otra cosa, el error desaparece.
Original:
<td id="nodeName"></td>
Nuevo:
<td id="nodeNameValue"></td>
// assign this to a variable
var val = this;
// Use
$(val).closest(''tr'').remove(); // It worked for me
En lugar de :
$(this).closest(''tr'').remove();