J'ai un petit problème ici. Je dois déclencher un événement contenant $ .post () pour charger un formulaire et l'attribuer à un DOM. Une fois cela est fait, j'ai modifier les champs du formulaire.
J'ai essayé: p> Malheureusement, cela ne fonctionne pas et si je le laisse, comme ça: p> le Le changement ressemble même à ceci: p> puis l'édition de formulaire est exécutée avant que le formulaire soit correctement chargé et attaché à dom. Cela pourrait être une question stupide pour les gars JavaScript, mais je suis principalement un gars PHP alors ne soyez donc pas cruel: -) p> Merci P> P>
4 Réponses :
.Live code>
a été obsolète en jQuery depuis v1.7 et a été supprimé en v1.9.
Vous devez le remplacer par .on () code>
. p>
Si l'élément existe au moment où vous êtes contraignant, vous le faites comme ceci: p> Vous pouvez même utiliser le raccourci: p> Si l'élément n'existe pas à l'époque ou que de nouveaux seront ajoutés (ce qui est ce que Remarque: vous souhaitez lier à l'élément statique le plus proche, pas toujours Entre-temps, jQuery migrer plugin strong> peut être utilisé pour restaurer le .on code> a 2 signatures pour des éléments de liaison, tandis que
.Live code> n'a eu que 1. P>
.Live code> était normalement utilisé pour), vous devez utiliser "Délégation d'événement" : p>
document code>. p>
.li ve () code> fonctionnalité Si vous mettez à niveau votre jQuery vers la version la plus récente. p> p>
Merci pour votre commentaire Roy. Je vais réécrire la fonction .Live () à .on () mais je pense que cela ne m'aidera pas avec mon problème. Est-ce compréhensible ou devrais-je simplement décrire le problème plus profond?
@Felixkling a essayé de trouver un problème, mais l'utilisateur n'a jamais répondu à mon formulaire de questions ci-dessus. Où est-ce que get_id_from_id code> vient? Mais on dirait que Matt a tout compris.
peut séparer votre code code> le code du gestionnaire? Quelque chose comme ceci: puis au lieu de déclencher le code> changer code> Vous pouvez simplement appeler hanterlechange code> transmettre un rappel à exécuter lorsque l'appel Ajax est Terminer: P>
handleChange($("#type_rank_field"), function(data) {
$('#quest_'+questions[i].split('|')[1])
.children('option[value="'+questions[i].split('|')[0]+'"]')
.attr('selected',true);
});
Cela ressemble en fait à une bonne idée! Je vais l'essayer et je vous ferai savoir si le problème est résolu ou non :)
@ MatTburland: Je n'ai signalé que cela comme j'utilise parfois ce motif exact et je me suis tiré dans le pied avant: d. Si JS m'a appris quelque chose, il ne s'appelle pas sur la coercition de type
Renvoie l'objet de promesse de votre gestionnaire d'événements: puis utilisez triggerhandler () code> à la place. p>
var promise = $('#type_rank_field').triggerHandler('change');
promise && promise.done(function(){
// do stuff
});
Wow ... Est-ce documenté?
Oui, il est documenté, la dernière balle de première section. API.JQUERY.com/triggerHandler
Cool. Un peu fragile (dépend de l'ordre des gestionnaires d'événements), mais intéressant.
Ok Kevin B indique une réponse à l'aide de la fonction dépréciée exacte live () code> et d'obtenir les uppots. Je place une réponse qui vous dit de ne pas utiliser cette fonction car elle pourrait faire partie de votre problème et je suis descendu. Comment ça marche ..... -1
Cela pourrait être corrigé avec un espace de noms en 1.9+, bien que les versions précédentes manipulèrent les espaces de noms de manière incohérente.
L'utilisation de .Live n'a rien à voir avec cette question.
@Roy: Vous êtes correct, .Live code> ne doit plus être utilisé, mais tous les faits corrects ne répondent pas à toutes les questions. Votre réponse ne résout pas le problème. C'est bon comme un commentaire mais pas comme une réponse.
Il est donc correct de donner des réponses à l'aide du code obsolète et supprimé tant que cela fonctionne ........ Pas de bonne forme.
Comment savez-vous qu'il n'utilise pas JQuery 1.3.2? S'il a mentionné qu'il utilisait 1,7+ ou utilisait une méthode mise en œuvre dans 1,7+, je suis d'accord avec la modification de cette partie du code dans la réponse. Tout ce que nous savons, c'est qu'il est au moins en utilisant 1.5 en raison de l'utilisation différée.
JQuery dit: Les utilisateurs d'anciennes versions de JQuery doivent utiliser .Delegate () de préférence à .Live (). Code> .... :)
Cela semble ok, mais ne fonctionne pas :-( J'utilise 1.8.2. Il ne charge même pas la forme.
Je pense que nous devons ajouter du rappel après posté
$('#type_rank_field').trigger('change', [function(){ $('#quest_'+questions[i].split('|')[1]).children('option[value="'+questions[i].split('|')[0]+'"]').attr('selected',true); }]);
Avez-vous vraiment besoin de déclencher l'événement code> modifier code>? Pouvez-vous non seulement refroidir le code dans votre code> changer code> dans une fonction distincte que vous pouvez simplement appeler?
Où est-ce que
get_id_from_id code> vient?
@Royfinley je m'attendais à cette question. C'est une fonction aussi socialistive que personne ne tentera jamais de l'utiliser avec ce nom.
Pas une solution, mais une explication de ce que vous voyez maintenant: la fonction de rappel que vous avez transmise à .done est exécutée dès que la fonction que vous avez transmise à. Quand est exécuté. Quand est exécuté. Cela signifie que le rappel de .done est exécuté après le déclenchement de l'événement "Changement", mais avant que ce soit appelé des gestionnaires a été appelé et bien sûr avant que votre appel soit exécuté, le poste est exécuté, beaucoup moins avant que le poste soit terminé et retourné.