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.

Était-ce utile?

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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top