2009-08-05 11 views
1

Ich verwende ASP.NET MVC und jQuery.JQuery Feuern, bevor meine Daten in die Seitensteuerelemente geladen werden

Ich habe diesen Code in meiner Js-Datei. Es sollte bestimmte divs verbergen und anzeigen, wenn ein Benutzer auf ein Optionsfeld klickt. Ich würde dies auch gerne beim Seitenladen mit der Trigger-Methode auslösen. Mein Problem scheint zu sein, dass beim Auslösen des Ereignisses meine Standardwerte aus dem Modell nicht in das Steuerelement geladen wurden und beide Kontrollkästchen falsch sind. Mein Code scheint korrekt zu sein, aber der Trigger löst gerade zu früh aus. Gibt es eine Möglichkeit zu sagen, dass der jQuery-Trigger nicht ausgelöst wird, bis meine Modelldaten in die Steuerelemente geladen wurden?

$(function() { $('table#ScheduleTable 
input.DailyFrequency, 
input.WeeklyFrequency').click(function() 
{ 
    if ($(this).attr('checked') == true & $(this).val() == "Daily") { 
     $('.dailyOption').children().show(); 
     $('.weeklyOption').children().hide(); 
    }; 
    if ($(this).attr('checked') == true & $(this).val() == "Weekly") { 
     $('.dailyOption').children().hide(); 
     $('.weeklyOption').children().show(); 
    } }); 

$('table#ScheduleTable 
input.DailyFrequency, 
input.WeeklyFrequency').trigger('click'); 
}); 

Antwort

0

Code auf den folgenden Stand aktualisiert. Es funktioniert jetzt. Danke für deine Antworten! :)

$('table#ScheduleTable input.DailyFrequency, 

input.WeeklyFrequency ') klicken (function() { UpdateScheduleView();} .);

function UpdateScheduleView() { 
    if ($('input.DailyFrequency').attr('checked') 

== true) { $ ('dailyOption.') Kinder() Show()..; $ ('. WeeklyOption'). Children(). Hide(); } sonst { $ ('. DailyOption'). Children(). Hide(); $ ('. WeeklyOption'). Children().Show(); } }

if ($('table#ScheduleTable input.DailyFrequency').length > 0) { 
    UpdateScheduleView(); 
-1

Sie shoudl das Ereignis ready verwenden statt:

$(document).ready(function() { 
    // do you jquery initialization here 
    $('table#ScheduleTable.... 
    ... 
}); 

http://docs.jquery.com/Events/ready

+0

Er ist $ (function() {}) == Verknüpfung zu $ ​​(document) .ready – redsquare

+0

$ (fn) und $ (document) .ready (fn) gleich ... –

0

Ich habe versucht, es nur in Firefox und $ (function() {}) und $ (document) .ready (function() {}) scheinen sich gleich zu verhalten, obwohl die .ready-Form von jquery empfohlen zu werden scheint. Vielleicht würde $ (document) .load besser funktionieren, da es bei manchen Browsern vorkommen kann, dass die Standardwerte später gefüllt werden? Verhält es sich auf allen Browsern oder nur auf einigen von ihnen?

+0

verhält sich gleich auf ie und chrome – littlechris

+0

Ich habe mir nur den Code angeschaut - bist du sicher, dass er das macht, was du willst? Insbesondere unter firefox wäre es folgende tun: 1) bindet die Ereignisse 2) Feuer 3x des Click-Ereignishandler (mit alten Werten der Kontrollkästchen) 3), um den Zustand der Kontrollkästchen ändern Wäre es nicht besser an das "geänderte" Ereignis der Checkboxen zu binden? – ondra

+0

Ok, ich glaube, ich habe es verstanden. Wenn das Click-Ereignis nach dem Klick ausgelöst wird, zeigt das Attribut "checked" den Status NEW an. Wenn Sie es mit "click()" oder "trigger ('click')" auslösen, wird Ihnen der OLD-Status angezeigt. Dies könnte ein Fehler im jquery-Code sein. – ondra

1

Wie laden Sie die Werte auf die Seite? Normalerweise ist es kein Problem, da sie in der html-Ausgabe sind und JQuery wartet, bis das mit der $ (function() {} - Logik geladen wird.

Da Ihr Trigger in der Logik $ (function() {} ist es wird nur sofort das Click-Ereignis laufen, sobald die Seite geladen wird.

Wenn Sie die Werte über ajax zum Beispiel laden, müssen Sie den Auslöser rufen, sobald der ajax-Aufruf abgeschlossen hat.

0

Was passiert, Wenn Sie diese Befehle stattdessen verketten, zB

Ich vermute, dass jQuery mit Ihrem aktuellen Skript zuerst die click -Ereignisfunktion startet und einrichtet, und jQuery hat sich dann daran gemacht, das Triggerereignis einzurichten.

Vielleicht wird jQuery gezwungen, das Klick-Segment zu beenden, bevor Sie den Trigger zuweisen?

Verwandte Themen