2009-05-23 11 views
73

Je souhaite déclencher l'événement de modification de la liste déroulante dans $ (document) .ready à l'aide de jquery. J'ai une liste déroulante en cascade pour le pays et l'état dans la page des détails de l'utilisateur. comment puis-je définir la valeur (qui est prise à partir de la base de données en fonction de l'ID utilisateur) pour le pays et l'état dans MVC avec C#.Déclenchement de l'événement de modification de la liste déroulante

+0

Vous pourriez vouloir mettre plus d'étiquettes telles que javascript et jQuery pour obtenir ce trouvé plus – xenon

+0

Collé ici aussi, merci! –

+0

http://stackoverflow.com/questions/31913370/set-or-change-thg-tortoisehg-branch-color/31913530#31913530 – LarryHuff

Répondre

156

Je ne sais pas beaucoup JQuery mais je l'ai entendu permet de tirer natif événements avec cette syntaxe.

$(document).ready(function(){ 

    $('#countrylist').change(function(e){ 
     // Your event handler 
    }); 

    // And now fire change event when the DOM is ready 
    $('#countrylist').trigger('change'); 
}); 

Plus d'informations here.

+26

'$ ('# countrylist'). Change();' fonctionne également maintenant. – Edgar

+11

Vous devez déclarer le gestionnaire d'événement change avant d'appeler 'trigger()' ou même 'change()' comme indiqué correctement dans cette réponse, c'est-à-dire si le code du gestionnaire d'événements apparaît sous l'appel, rien ne se passe! :) –

+3

@LenielMacaferi Merci de m'avoir sauvé une heure ou deux. –

2

Si vous essayez d'avoir des listes déroulantes liées, la meilleure façon de le faire est d'avoir un script qui renvoie la boîte de sélection prédéfinie et un appel AJAX qui le demande.

Here is the documentation for jQuery's Ajax method if you need it.

$(document).ready(function(){ 

    $('#countrylist').change(function(e){ 
     $this = $(e.target); 
     $.ajax({ 
      type: "POST", 
      url: "scriptname.asp", // Don't know asp/asp.net at all so you will have to do this bit 
      data: { country: $this.val() }, 
      success:function(data){ 
       $('#stateBoxHook').html(data); 
      } 
     }); 
    }); 

}); 

Puis ont une durée autour de votre état boîte de sélection avec l'id de « stateBoxHook »

+0

J'ai des listes déroulantes en cascade: <% = Html.DropDownList ("MyCountries", "- --Sélectionnez Pays --- ")%> <% = Html.CascadingDropDownList (" MyStates "," MyCountries ")%> Je peux définir la valeur de MyCountries comme $ (" # MyCountries "). Val ('<% = Model.CountryId%>'); dans $ (document) .ready. Mais je ne suis pas en mesure de définir la valeur pour l'état car il affiche une seule option "Select State", qui doit être rempli sur l'événement country onchange car ils sont des menus déroulants en cascade. Ceci est un problème réel. – Prasad

+0

Vous ne savez toujours pas ce que vous recherchez. Est-ce que vous essayez de mettre en place un système qui sélectionne un pays et qui réduit la liste aux États de ce pays? Si tel est le cas, vous devrez avoir un appel AJAX sur le serveur et envoyer le pays sélectionné, puis renvoyer une liste d'états dans ce pays. – xenon

+0

J'ai défini USA comme Pays et Alabama comme État, qui est une liste déroulante en cascade, tout en ajoutant le profil de l'utilisateur. Et quand je reviens à cette page pour éditer un champ, j'ai besoin que le pays et l'état soient remplis avec les valeurs que j'ai définies précédemment. Je n'ai aucun problème à ajouter le profil utilisateur, quand je reviens à la page pour éditer, je peux définir la valeur pour la liste déroulante Pays et dans la liste déroulante état les valeurs ne sont pas remplies car elle est en cascade événement de changement de valeur d'un pays. Pour cela, je dois déclencher l'événement de changement de pays afin que l'état se remplit et je peux définir l'état – Prasad

10

Essayez ceci:

$(document).ready(function(event) { 
    $('#countrylist').change(function(e){ 
     // put code here 
    }).change(); 
}); 

Définir l'événement de changement, et déclencher immédiatement. Cela garantit que le gestionnaire d'événements est défini avant de l'appeler.

est peut-être tard pour répondre à l'affiche originale, mais quelqu'un d'autre pourrait bénéficier de la notation abrégée, ce qui suit l'enchaînement de jQuery, etc

jquery chaining

1

Essayez ceci:

$('#id').change();

Fonctionne pour moi.

Sur une ligne avec réglage de la valeur: $('#id').val(16).change();

+0

$ ('# id'). Val (16) .change(); l'a fait pour moi. – TomoMiha

+0

Merci, @TomoMiha. Ajouté dans la réponse. –

1

Sinon, vous pouvez mettre onchange attribut sur l'dropdownlist lui-même, que onchange appellera certaines fonctions jquery comme celui-ci.

<input type="dropdownlist" onchange="jqueryFunc()"> 

<script type="text/javascript"> 
$(function(){ 
    jqueryFunc(){ 
     //something goes here 
    } 
}); 
</script> 

espoir celui-ci vous aide, et s'il vous plaît noter que ce code est juste un brouillon, non testé sur une ide. merci

+0

Cela ne déclenche pas l'événement de modification lors du premier chargement de la page (selon la question de l'OP) –

Questions connexes