Utilisez .data() pour passer des paramètres à une fonction depuis un callback
Bonjour,
Sous ce titre bien pompeux un problème récurrent dans mon application...
Imaginons le code suivant :
Code:
1 2 3 4 5 6 7
| function OuvrePopup(event)
{
var width = $(this).data("width");
var element_a_afficher = $(this).data("a_afficher");
//... code utilie pour creer la popup de largeur width...
// popup.append($("<div />").text(element_a_afficher));
} |
on a donc une fonction qui créée dynamiquement une popup a partir d'une largeur et d'un contenu qu'on peut passer en paramètre depuis n'importe quel élément HTML. Ex :
Code:
1 2 3 4
| <input type="text" data-width="200" data-a_afficher="coucou" class="input_qui_reagit" />
<script language="javascript">
$("input.input_qui_reagit").on("focus", OuvrePopup);
</script> |
jusque la, tout va bien.
Maintenant, imaginons que j'ai besoin d'ouvrir cette popup non plus au focus sur un input, mais par exemple lorsque je reçoit la réponse d'un appel ajax...
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| $.ajax({
url: "ajax.php",
type: "POST",
dataType: "json",
async: true,
data: {machin:10}
})
.done(function(datas) {
// la, je veux appeler ma popup
// sachant que datas.width et datas.a_afficher contiennent les 2 valeurs dont j'ai besoin
OuvrePopup(); // donc c'est la que j'ai un probleme !
}); |
Comment puis-je faire pour que dans le dernier exemple, $(this).data("width") soit correctement initialisé lors de l'éxecution de OuvrePopup() ? Est-ce juste possible ?
Je précise que l'idée est bien d'utiliser la même fonction partout, donc pas de modif du prototype de la focntion, et on oublie les astuces type j'insère mes données dans l'event.
En vous remerciant.