La logique du change()
gestionnaire d'événements n'est pas exécutée lorsque la valeur est définie par val()
, mais elle s'exécute lorsque l'utilisateur sélectionne une valeur avec sa souris. Pourquoi est-ce?
<select id="single">
<option>Single</option>
<option>Single2</option>
</select>
<script>
$(function() {
$(":input#single").change(function() {
/* Logic here does not execute when val() is used */
});
});
$("#single").val("Single2");
</script>
Je pense que vous pouvez déclencher manuellement l'événement de modification avec
trigger()
:Bien que pourquoi il ne se déclenche pas automatiquement, je n'en ai aucune idée.
la source
$('#foo').change(function() { $( this ).val( 'whatever' ); });
L'ajout de ce morceau de code après le val () semble fonctionner:
la source
$(":input#single")
. En fait, vous ne devriez vraiment pas. Il suffit de l'enchaîner après le.val()
. Vous pouvez utiliser.trigger('change')
ou.change()
. Ce sont exactement les mêmes.Autant que je puisse lire dans les API. L'événement n'est déclenché que lorsque l'utilisateur clique sur une option.
http://api.jquery.com/change/
la source
input
éléments, pas lorsque l'élément perd le focus. Savez-vous?Pour le rendre plus facile, ajoutez une fonction personnalisée et appelez-la quand vous le souhaitez, la modification de la valeur déclenche également le changement
et
Ou vous pouvez remplacer la fonction val pour toujours appeler la modification lorsque le val est appelé
Exemple sur http://jsfiddle.net/r60bfkub/
la source
change
événement -événement sur un contrôle et exécutez un rappel qui (directement ou indirectement) déclenche à nouveau l'change
événement -événement sur le même contrôle. Je vous suggère d'utiliser un autre nom pour l'événement que vous déclenchez manuellement (par exempleexplicit.change
), afin qu'il ne déclenche pas à nouveau l'change
événement, empêche la boucle et vous permette toujours de réagir à l'événement.Si vous ne souhaitez pas confondre avec un événement de modification par défaut, vous pouvez fournir votre événement personnalisé
pour déclencher l'événement sur la valeur définie, vous pouvez le faire
la source
J'ai rencontré le même problème lors de l'utilisation de CMB2 avec Wordpress et je voulais me connecter à l'événement de changement d'une métabox de téléchargement de fichier.
Donc, si vous n'êtes pas en mesure de modifier le code qui appelle la modification (dans ce cas, le script CMB2), utilisez le code ci-dessous. Le déclencheur est invoqué APRÈS que la valeur est définie, sinon votre changement eventHandler fonctionnera, mais la valeur sera la précédente, pas celle qui est définie.
Voici le code que j'utilise:
la source
this.selector
à l'intérieur de la$.fn.val
fonction prioritaire , pour un sélecteur spécifique (dépendra de ce qui est utilisé pour le sélecteur). C'est le meilleur que j'ai trouvé pour faire cela uniquement pour des domaines spécifiques, le seul problème est que vous devez savoir ce qu'ils utilisent pour le sélecteurCela a fonctionné pour mon script. J'ai 3 combos et je lie avec l'événement chainSelect, je dois passer 3 valeurs par URL et par défaut sélectionner tout déroulant. J'ai utilisé ça
Et le premier événement a fonctionné.
la source
Si vous venez d'ajouter l'option de sélection à un formulaire et que vous souhaitez déclencher l'événement de modification, j'ai trouvé qu'un setTimeout est requis sinon jQuery ne récupère pas la boîte de sélection nouvellement ajoutée:
la source