2009-05-23 24 views
73

Chcę wywołać zdarzenie zmiany menu rozwijanego w $ (document) .ready przy użyciu jquery.Zdarzenie zmiany wyzwalacza z rozwijanego menu

Mam kaskadowe menu rozwijane dla kraju i stanu na stronie szczegółów użytkownika. jak mogę ustawić wartość (która jest pobierana z DB na podstawie identyfikatora użytkownika) dla kraju i stanu w MVC z C#.

+0

Możesz chcieć umieścić więcej tagów takich jak javascript i jQuery, aby je znaleźć więcej – xenon

+0

Utknąć tutaj, dzięki! –

+0

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

Odpowiedz

156

nie wiem, że dużo JQuery ale słyszałem, że pozwala na ogień rodzimy zdarzenia z tą składnią.

$(document).ready(function(){ 

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

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

Więcej informacji here.

+26

'$ ('# countrylist'). Change();' również działa teraz. – Edgar

+11

Musisz zadeklarować procedurę obsługi zdarzenia zmiany przed wywołaniem 'trigger()' lub nawet 'change()', jak poprawnie pokazano w tej odpowiedzi, to znaczy, jeśli kod obsługi zdarzenia pojawia się poniżej połączenia, nic się nie dzieje! :) –

+3

@LenielMacaferi Dziękuję za uratowanie mnie godzinę lub dwie. –

2

Jeśli próbujesz połączyć listę rozwijaną, najlepszym sposobem na to jest posiadanie skryptu, który zwraca wstępnie zbudowane pole wyboru i wywołanie AJAX, które o to poprosi.

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); 
      } 
     }); 
    }); 

}); 

Następnie mają rozpiętość wokół państwowego wybierz pole z identyfikatorem „stateBoxHook”

+0

Mam listę rozwijaną kaskadowo: <% = Html.DropDownList ("Moje kraje", "- - Wybierz kraj --- ")%> <% = Html.CascadingDropDownList (" MyStates "," MyCountries ")%> Mogę ustawić wartość MyCountries jako $ (" # MyCountries "). Val ("<% = Model.CountryId%>"); w $ (dokument) .ready. Ale nie jestem w stanie ustawić wartości dla stanu, ponieważ pokazuje tylko jedną opcję "Wybierz stan", która powinna zostać wypełniona przy zdarzeniu country onchange, ponieważ są to listy kaskadowe. To jest aktualny problem. – Prasad

+0

Nadal nie jestem pewien, czego szukasz. Czy próbujesz osiągnąć system, w którym wybierają państwo i zawęzić listę do stanów w tym kraju? W takim przypadku będziesz musiał wywołać AJAX na serwerze i wysłać wybrany kraj, a następnie zwrócić listę stanów w tym kraju. – xenon

+0

Ustawiłem USA jako Kraj i Alabamę jako Stan, który jest rozwijany kaskadowo, dodając profil użytkownika. A kiedy wracam do tej strony, aby edytować pole, muszę Kraj i Państwo, aby wypełnić wartości, które ustawiłem wcześniej. Nie mam problemu z dodaniem profilu użytkownika, kiedy wracam do strony do edycji, jestem w stanie ustawić wartość dla listy rozwijanej Kraj, a w liście rozwijanej wartości nie są wypełnione, ponieważ są kaskadowane, co zostaje wypełnione zmiana wartości waluty krajowej. W tym celu należy wywołać zdarzenie zmiany kraju, aby stan wypełnił się i mogę ustawić stan – Prasad

10

Spróbuj tego:

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

Zdefiniuj zdarzenie change, i wyzwolić go od razu. Zapewnia to zdefiniowanie procedury obsługi zdarzenia przed wywołaniem go.

Może być późno, aby odpowiedzieć oryginalnego plakatu, ale ktoś inny może korzystać ze skrótowym zapisem, a wynika to łańcuchowym jQuery itp

jquery chaining

1

Spróbuj tego:

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

Działa dla mnie.

na jednej linii wraz z ustawieniem Wartość: $('#id').val(16).change();

+0

$ ("# id"). Val (16) .change(); zrobiłem to dla mnie. – TomoMiha

+0

Dzięki, @TomoMiha. Dodano go w odpowiedzi. –

1

alternatywnie można umieścić atrybut onchange na samej dropdownlist, że będzie onchange wywołać pewną funkcję jquery takiego.

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

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

mam nadzieję, że ten ci pomoże, i proszę zauważyć, że ten kod to tylko szkic, który nie jest testowany na żadnej idei. dzięki

+0

Nie powoduje to zdarzenia zmiany po załadowaniu strony (zgodnie z pytaniem OP) –

Powiązane problemy