Uncaught TypeError: Impossible d'appeler la méthode « toLowerCase » undefined
-
27-10-2019 - |
Question
je suis tombé sur une erreur très vague tout en faisant une simple manipulation jQuery DOM.
La ligne qui a déclenché l'erreur est la suivante:
$(this).closest('tr').remove();
L'erreur, comme indiqué dans le titre, est:
Uncaught TypeError: Ne peut pas appeler la méthode 'toLowerCase' undefined
dans le fichier. jquery-1.6.2.js
Je l'ai déjà essayé avec jQuery 1.6.3 et jQuery 1.5.1, mais rien n'a changé. Je garde encore obtenir l'erreur.
La ligne ci-dessus est lié à un bouton qui, lorsque vous cliquez dessus, soumet une requête AJAX POST, puis en cas de succès, il supprime sa propre <tr>
. Je l'ai déjà essayé une autre façon en faisant:
$(this).parent().parent().remove()
mais à ma grande surprise, cela n'a rien fait.
J'utilise Chrome, dans le cas où il importe, mais je reçois la même erreur dans FF.
EDIT:
Ceci est mon code:
$(".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 je mets le supprimer () en dehors du cas quelque part, cela fonctionne. Pourquoi pas travailler quand il est dans l'appel ajax / si? N'a pas de sens pour moi? : (
Toute aide ici? Merci à l'avance.
La solution
Je ne sais pas ce que vous attendre la valeur de this
être dans votre gestionnaire de « succès », mais je parie que ce n'est pas ce que vous pensez. Enregistrer this
en dehors de la ".ajax $ ()" appel:
var clicked = this;
$.ajax(
// ...
success: function(res) {
if (res) {
$(clicked).closest('tr').remove();
}
else {
// ...
}
}
);
Autres conseils
À votre demande, $ (ce) n'est pas l'élément .remove
. Il est un problème de fermeture.
Vous pouvez attribuer $ (ce) à une variable avant et après l'appeler
// assign this to a variable
var val = this;
// Use
$(val).closest('tr').remove(); // It worked for me
Au lieu de:
$(this).closest('tr').remove();
Je suis exactement la même erreur sur $. Get () demande .
Pour moi, c'est le plus étrange bug dans jQuery (ma version 1.8.3).
Ma raison de cette erreur était élément TD avec l'ensemble ID à "nodeName" .
Après le changement de valeur ID à quelque chose d'autre, le dissapear d'erreur.
Original:
<td id="nodeName"></td>
Nouveau:
<td id="nodeNameValue"></td>