J'ai un problème javascript inhabituel, j'ai un problème javascript qui refuse alternativement de travailler. En gros, le premier clic, la fonction jquery fonctionne comme il se doit, la suppression de la ligne de table et de redessiner les lignes de la table:comportement jquery incohérent
$(".deleteRow").click(function(e){
if(confirm("This will delete the selected week. Are you sure?")){
$.ajax({
type: 'POST',
url: 'http://localhost/todo/index.php/home/ajax_delete',
data: { page_id : $(this).attr('id') },
success: tableRedraw,
dataType: 'html'
})
};
e.preventDefault();
})
cependant, si je clique sur le bouton qui déclenche cette fois, cela ne fonctionne pas. Au lieu de passer par la fonction javascript, il suit le lien (conçu pour le mode non javascript). Je ne comprends pas ce comportement inhabituel, j'aurais pu penser qu'il était causé par la source jquery n'étant pas disponible (pour une raison inconnue) mais j'ai une autre fonction qui ajoute des lignes à la table, qui peut être utilisé plusieurs fois de suite sans problèmes:
$("#addRow").click(function(e){
$.ajax({
type: 'POST',
url: 'http://localhost/todo/index.php/home/ajax_add',
success: tableRedraw,
dataType: 'html'
})
e.preventDefault();
})
})
toute aide serait grandement appréciée.
place sur, je ne savais pas que les éléments dynamiques n'ont pas répondu aux mêmes gestionnaires. +1 pour identifier le problème – richzilla
@richzilla - Oui, lorsque vous attachez un gestionnaire à un élément, il reçoit en fait un numéro de série qui référence ses gestionnaires. Lorsque vous détruisez des éléments, vous devez faire attention à la façon dont vous le faites, car ces derniers s'attarderont s'ils ne sont pas nettoyés. Cela pourrait être une énorme fuite de mémoire dans votre cas. Je vous suggère fortement de réévaluer la fonction 'tableRedraw'. Tandis que des méthodes comme '.live()' ou '.delegate()' peuvent (en quelque sorte) résoudre le problème, vous ne devriez vraiment pas détruire des éléments uniquement pour les recréer. Il y a souvent une façon différente/meilleure. – user113716