2016-01-21 1 views
0

Je travaille avec la table bootstrap à l'intérieur du dialogue jquery et j'ai des problèmes avec la fermeture du dialogue et la libération de la mémoire. Permettez-moi de montrer sur le code de démonstration:les boutons ne fonctionnent pas correctement dans le contenu du dialogue jq (deux façons de fermer le dialogue jquery avec la table bootstrap)?

Méthode 1:jsFIDDLE Voici le code avec deux boutons à l'intérieur du contenu de dialogue que j'utiliser pour enregistrer ou annuler. Ils sont codés avec $.click() (pas par le dialogue). Pour voir le problème 4 étapes en jachère:

  1. Cliquez sur la première case et accepter la date
  2. Faites la même chose pour la deuxième case
  3. Décocher les deux (champ de date est vide dans les deux lignes)
  4. Vérifiez à nouveau un case à cocher et accepter la date

Vous remarquerez maintenant que la date a été ajoutée dans les deux champs de chaque ligne même si vous n'avez pas cliqué sur la seconde. Quand je joue plus comme ça, je peux même décocher les deux cases en un clic.

Méthode 2:jsFIDDLE La même idée, mais j'utiliser les boutons définis dans le dialogue jquery et si vous faites les mêmes étapes d'en haut, vous ne remarquerez pas le problème - il fonctionne très bien.

Question: Je dois utiliser la première méthode pour mon propre but, mais que faire pour résoudre ce problème de mémoire?

+0

qu'est-ce que cela a à voir avec une fuite de mémoire? – dandavis

+0

Je ne suis pas anglais, je peux utiliser une mauvaise terminologie, désolé pour mon anglais. Je veux juste dire qu'il mémorise en quelque sorte les dernières étapes (index de ligne). Peut-être qu'il y a quelque chose avec la destruction du dialogue, pourquoi la deuxième méthode fonctionne bien? – soonic

+0

je pense '$ ('# submitBtn'). Click' est appliqué plusieurs fois parce qu'un console.log() à l'intérieur se déclenche une fois la première fois, et plusieurs fois après cela ... – dandavis

Répondre

3

Vous avez un problème d'étendue dans votre code; S'il vous plaît essayer cette mise à jour Fidle

var currentRow = null; 

$("#pickdate").datepicker({dateFormat: "dd-mm-yy"}).datepicker("setDate",new Date()); 
$('#table').on('check.bs.table', function (e, row, $el) { 

currentRow = row; 

    $("#dialog").dialog({ 
       dialogClass: "no-close tt", 
       modal: true, 
       title: "Data zamknięcia", 
       width:189, 
     }); 


}); 

Voir fIDLE pour le code complet

+0

Merci beaucoup, ça marche! Je pense pourquoi cela doit être fait comme ça? Il devrait prendre le plus récent row.id dans ma démo et il n'y a qu'une seule ligne où j'attribue la valeur du champ par temps – soonic

+0

@soonic Je suis heureux d'avoir pu aider. Il vaudrait mieux que ma réponse soit correcte pour aider les autres – Sandcar

+0

Cela me rendait fou jusqu'à maintenant. Je n'ai pas remarqué que vous avez également changé les crochets pour la fonction 'check.bs.table' donc ces deux boutons (annuler et ok) sont sortis de celui-ci. Le problème avec 'row' était parti mais j'ai remarqué que je soumettais quelques fois en travaillant avec d'autres valeurs. Eh ... maintenant ça marche vraiment :)) Mon premier commentaire n'est plus valide. Je comprends maintenant :) Merci encore! – soonic