Y a-t-il un moyen de faire appel à une fonction HTML Select appeler une fonction chaque fois que sa sélection a été modifiée par programme?
IE et FF ne pivotera pas "Onchange" lorsque la sélection actuelle dans une zone de sélection est modifiée avec JavaScript. À côté, la fonction JS change que la sélection fait partie du cadre, donc je ne peux pas la modifier pour déclencher un onchange () à la fin, par exemple. P>
Voici un exemple: P>
<body> <p> <select id="sel1" onchange="myfunction();"><option value="v1">n1</option></select> <input type="button" onclick="test();" value="Add an option and select it." /> </p> <script type="text/javascript"> var inc = 1; var sel = document.getElementById('sel1'); function test() { inc++; var o = new Option('n'+inc, inc); sel.options[sel.options.length] = o; o.selected = true; sel.selectedIndex = sel.options.length - 1; } function myfunction() { document.title += '[CHANGED]'; } </script> </body>
5 Réponses :
Si vous pouvez étendre / modifier le cadre pour donner un crochet / rappel lors de la modification des options de sélection, ce serait mieux (une solution pourrait être d'utiliser les capacités dynamiques de JS à Duck Tapez-le?).
omettre cela, il y a une solution inefficace - sondage. Vous pouvez configurer un appel de Settimeout / SetInteval qui interroge l'élément d'option de sélection souhaité, et tirez votre propre rappel lorsqu'il détecte que quelque chose a changé. p>
comme pour la réponse à votre question p>
Y a-t-il un moyen d'appeler () appeler myfunction () sans changement de test () (ou ajout d'un événement sur le bouton)? P> blockQquote>
Oui, en utilisant jQuery aop http://plugins.jquerer.com/project / AOP , il donne une solution Easy-ISH. P>
<body> <p> <select id="sel1" onchange="myfunction();"><option value="v1">n1</option></select> <input type="button" onclick="test();" value="Add an option and select it." /> </p> <script type="text/javascript"> var inc = 1; var sel = document.getElementById('sel1'); function test() { inc++; var o = new Option('n'+inc, inc); sel.options[sel.options.length] = o; o.selected = true; sel.selectedIndex = sel.options.length - 1; } function myfunction() { document.title += '[CHANGED]'; } //change to aop.after if you want to call afterwards jQuery.aop.before( {target: window, method: 'test'}, function() { myfunctino(); } ); </script> </body>
J'ai aussi pensé à la deuxième option, mais j'utiliserais seulement la minuterie s'il s'agit de mon dernier recours. La première solution sonne bien, comment pourrais-je prolonger / crochet de test sans modifier son code source?
+1. L'interrogation est une option qui mérite d'être envisagée. Cependant, vous devriez accepter que le code que vous souhaitez invoquer sur le changement ne fonctionne pas de manière synchrone avec le changement.
La réponse est .... Non. P>
Le DOM déclenche uniquement l'événement OnChange à la suite de l'action de l'utilisateur, pas de code. Il ne fournit aucun événement supplémentaire à accrocher à cet égard. P>
Vous devrez personnaliser le cadre ou supprimer votre besoin. P>
ahem ...
Vous pouvez accéder à l'événement "OnPropertyChange" contient une propriété dans les arguments de l'événement pour identifier quelle propriété a été modifiée. p>
Il détecte les modifications «sélectionnées» et «valeur» - Simplement testez le test «Nom de propriété» Je travaille actuellement avec le cadre ASP.NET JS Voici un code de pâte droite-coller pour cela: p>
this._selectionChangedHandler = null; p> this._selectionChangedHandlerdler = fonction.Createdélégate (ceci, cela._onsélectionChanged); p> $ addhandler ( Élément, "de biensChanger", this._selectionChangedHandler); p> 4) Créer une fonction forte> p> _onSelectionChanged: function(ev) {
if (ev.rawEvent.propertyName == "selectedIndex")
alert('selection changed');
},
Définissez votre propre fonction de changement qui appelle la fonction-cadre, puis appelle un Fonction de rappel.
E.g.: P>
function change(callback) { frameworkchange(); callback(); }
avec jQuery, vous pouvez faire quelque chose comme ceci détecterait le changement de manière programmatique et vous permettrait de répondre à chaque élément modifié P> P>
L'événement OnChange signifie plutôt que l'utilisateur a changé sa sélection et non que les options ont été modifiées.