2011-10-06 4 views
9

J'ai des menus déroulants de sélection dynamique. Par exemple, si vous sélectionnez un mois spécifique, le deuxième élément de sélection sera rempli avec le nombre de jours dans ce mois. Cela fonctionne comme prévu, mais lorsque l'utilisateur est sur un iPhone et utilise le bouton "Suivant" intégré dans "l'assistant de formulaire" de Mobile Safari, l'événement change (utilisant jQuery) ne semble pas se déclencher et le 2ème sélectionne ne met pas à jour.Modifier l'événement ne se déclenche pas sur certains éléments avec l'assistant de formulaire Mobile Safari

$('.month').change(function() { 
    // update "days" select element 
}); 

Pour votre information, je suis aussi en utilisant jQuery Mobile

+0

toute sortie dans le débogueur iPhone (mode débogage Safari)? –

+0

Aucun. Je pense que cela peut être juste un bug de safari mobile. – wdm

Répondre

2

La meilleure solution que j'ai pu trouver était basée sur cet article ...

Strange behavior of select/dropdown's onchange() JS event when using 'Next' on Mobile Safari Dropdown list item select box

Utilisation du plug-in (à partir du lien ci-dessus), je devais forcer le menu de sélection à blur dès qu'une option a été choisie avec « forme assistant » Mobile Safari.

J'ai remarqué cependant que lors d'un test de force brute de ces menus, un événement supplémentaire blur se déclencherait après quelques sélections de va-et-vient. Un focus supplémentaire a semblé résoudre cela.

$('select').quickChange(function() { 
    $(this).blur(); 
    $('select').focus(); // somehow prevents an extra blur from firing on focus 
}); 

Avec une fonction séparée change je mets à jour le deuxième menu de sélection dynamique.

$("#select-choice-month").change(function() { 
    // update second select dynamically 
}); 

* Testé uniquement sur Mobile Safari/iOS 5.0.1 jusqu'à présent.

5

Vous pouvez également lier quelques événements supplémentaires comme blur (ne sais pas si le flou fait feu sur iphone si)

$('.month').bind('change blur',function(){ 

}); 

ou ont Vous avez essayé:

$('.month').live('change',function(){ 
}); 
+0

Merci pour la suggestion. J'ai essayé plusieurs événements différents car je pensais que cela pourrait être le problème. N'a pas pu en tirer. – wdm

+0

@wdm a mis à jour ma réponse – Andy

+0

Le mois select est statique dans le DOM donc la fonction 'live()' que je ne crois pas est nécessaire. Je lui ai donné un coup de toute façon et pas de chance. – wdm

Questions connexes