Ai-je raison de comprendre que vous voulez sélectionner l'article après avoir mis à jour la liste déroulante? Donc, tout d'abord, vous avez écrit votre déclencheur jQuery manuellement et en utilisant dropDownList. Vous devriez choisir l'un ou l'autre. Ma réponse va supposer que vous écrivez le javascript manuellement, mais cela pourrait tout aussi bien être placé dans le tableau ajax pour passer à dropDownList
.
Vous avez raison de dire que votre jQuery en cours s'exécute avant l'AJAX que vous essayez d'exécuter. idx
peut être défini à l'avance, mais la définition de l'option sélectionnée doit être effectuée une fois la liste déroulante remplie, ce qui explique pourquoi nous déplaçons cette option dans votre fonction de réussite. La façon dont vous l'avez actuellement (dans le $(function(){
), place ce bloc de script dans le document prêt - $(function(){
est vraiment raccourci pour $(document).ready(function() {
, ce qui signifie que tout script dans cette fonction sera exécuté lorsque le document est prêt (pas lorsque vous avez mis à jour le DOM en utilisant AJAX). Les détails sur la sténographie peuvent être lus dans les docs, juste avant la section Rate Me: Using AJAX.
Pour obtenir votre javascript pour travailler comme vous le souhaitez, supprimer le premier bloc <script>
et changer la seconde à quelque chose comme:
<script type="text/javascript">
/*<![CDATA[*/
var idx = "<?php echo $smth ?>";
jQuery(function($) {
jQuery('a.tooltip').tooltip({'placement':'bottom'});
jQuery('a[rel="popover"]').popover();
$('body').on('change','#country_id',
function(){
jQuery.ajax({'type':'POST',
'url':'/currentController/dynamiccities',
'cache':false,
'data':jQuery(this).parents("form").serialize(),
'success': function(html){
jQuery("#city_id").html(html);
jQuery("#country_id").prop("selectedIndex", idx);
}
});
return false;});
});
/*]]>*/
</script>
Notez que cela ne fonctionnera que si $smth
est vraiment l'indice de l'option dans la liste déroulante vous peupler. Personnellement, si je faisais cela, au lieu d'utiliser prop(), j'utiliserais attr() et la valeur de la liste déroulante, car c'est un peu plus facile à suivre qu'un index, et faire quelque chose comme ceci:
<script type="text/javascript">
/*<![CDATA[*/
jQuery(function($) {
jQuery('a.tooltip').tooltip({'placement':'bottom'});
jQuery('a[rel="popover"]').popover();
$('body').on('change','#country_id',
function(){
jQuery.ajax({'type':'POST',
'url':'/currentController/dynamiccities',
'cache':false,
'data':jQuery(this).parents("form").serialize(),
'success': function(html){
jQuery("#city_id").html(html);
var selectedCountry = "#country_id option[value='" + <?php echo $countryID ?> + "']";
jQuery(selectedCountry).attr('selected', 'selected');
}
});
return false;});
});
/*]]>*/
</script>
Plus probablement, je ferais ce côté serveur dans le PHP et assurez-vous que le code HTML je passais de retour pour la liste déroulante avait déjà l'option appropriée sélectionnée.
faire la demande à l'intérieur dans un 'gestionnaire change' http://api.jquery.com/change/ S'il vous plaît script de post source ... nous ne sommes pas serveur parseurs – charlietfl
@charlietfl Voici le code de mon script. – gormit
ajoute un attribut de succès au tableau 'ajax' pour gérer les données renvoyées par le POST. – ernie