Pourquoi mon jquery .on('change') ne fonctionne pas pour l'ajouter dynamiquement sélectionne
Je suis en ajoutant sélectionnez les éléments de façon dynamique, comme dans le dessous de HTML. Je ne suis pas sûr pourquoi, la .sur (le "changement"...) n'est pas de travail pour la dynamique de la sélectionner. Ce qui me manque?
Je suis en utilisant google Chrome 24.0.1312.57 + jquery 1.8.3.
<script type="text/javascript">
$(document).ready(function() {
$('#x select').on('change', function () { alert('helo'); })
$('#y select').on('change', function () { alert('helo'); })
$('#x').html($('#y').html());
});
</script>
<div id="x"></div>
<div id="y">
<select>
<option>O1</option>
<option>O2</option>
</select>
</div>
Vous devez vous connecter pour publier un commentaire.
Votre code:
attache un gestionnaire d'événement pour la sélectionner à l'intérieur de la #x élément.
Ce que vous voulez (de ce que j'ai compris) c'est quelque chose dans le genre de:
Cette attache un gestionnaire d'événement à l' #y de l'élément qui est déléguée à ses enfants", sélectionnez " éléments
De http://api.jquery.com/on/
#y
jamais fait de changements. Seulement il est contenu html est copiée sur l'autre élément. Pourquoi faut-il le feu à changer dans ce cas?Événement se liant à des éléments qui ne sont pas dans les DOM sur le chargement initial de la page ne fonctionne pas. Vous avez besoin de se lier à un élément de plus le DOM qui existe pour permettre à l'événement de descendre. C'est généralement l'approche que je prends:
Je préfère que vous le pouvez ajouter des événements subséquents facilement.
$(document).on('change', '#x select', function() { alert('hello'); });
Votre événement de liaison est définie sur $(document).ready(). Toutefois, si vous ajouter dynamiquement plus tard (via jQuery.appendTo() par exemple), le nouvellement ajouté, doit être appliqué, car ils ne faisaient pas partie de le premier une qui s'est passé dans le $(document).ready(), qui ne fonctionne que lorsque la page est chargée et que le DOM est d'abord fait.
Syntaxe correcte:
Donc la syntaxe de
on()
pour élément dynamique semble:Le point de l'ensemble de l' .sur() est de sorte que vous pouvez lier l'événement à autre chose que le document. C'est ce que le désormais amortis .live() l'a fait et il est inefficace dans la plupart des cas. Vous êtes décidé à lier l'événement le plus proche parent de l'élément qui ne seront pas modifiés dynamiquement.
Autant que je suis conscient de cela est la bonne syntaxe:
Si #x #ou y sera changé, enveloppez-les sur un élément et lier l'événement pour que.
C'est facile. Quelle que soit la classe ou l'id de votre ciblage, essayez d'être plus précis, mais pas besoin d'inclure un super parent.
Exemple de la mauvaise façon:
JS:
FAÇON CORRECTE:
JS:
Avis j'ai abandonné la super-parent: "#tablecontent'
Tout au sujet de la clarté.
JS:
JS:
JS:
JS:
Le mot entre crochets est le texte qui est affiché si le navigateur ne peut pas afficher l'image. Assurez-vous de comprendre un texte alternatif pour les logiciels de lecture d'écran.
Ne pas utiliser
.live()
/.bind()
/.delegate()
, cependant. Vous devriez utiliser .on()
.pour à la fois statique et dynamique, sélectionnez changements