2009-08-05 5 views
1

J'utilise ASP.NET MVC et jQuery.Lancement JQuery avant le chargement de mes données dans les contrôles de page

J'ai ce code dans mon fichier js. Il devrait cacher et montrer certains divs quand un utilisateur clique sur un bouton radio. Je voudrais également tirer sur le chargement de la page en utilisant la méthode de déclenchement. Mon problème semble être que lorsque l'événement est déclenché mes valeurs par défaut du modèle n'ont pas été chargées dans le contrôle et les deux cases à cocher sont fausses. Mon code semble correct, mais le déclencheur est juste en train de se déclencher trop tôt. Est-il possible de dire au déclencheur jQuery de ne pas se déclencher tant que les données de mon modèle n'ont pas été chargées dans les contrôles?

$(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'); 
}); 

Répondre

0

Le code a été mis à jour comme suit. Cela fonctionne maintenant. merci pour vos réponses! :)

$('table#ScheduleTable input.DailyFrequency, 

input.WeeklyFrequency ') cliquez sur (function() { UpdateScheduleView();} .);

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

== true) { $ ('dailyOption.') Enfants() de spectacle().. $ ('. WeeklyOption'). Children(). Hide(); } else { $ ('.jourOption'). Children(). Masquer(); $ ('. WeeklyOption'). Enfants().montrer(); }}

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

vous shoudl utiliser l'événement prêt à la place:

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

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

+0

Il est $ (function() {}) == raccourci $ (document) .ready – redsquare

+0

$ (fn) et (document) $ .ready (fn) sont les mêmes ... –

0

J'ai juste essayé dans Firefox et $ (function() {}) et $ (document) .ready (function() {}) semble se comporter de la même manière, bien que la forme .ready semble être recommandée par jquery. Peut-être que $ (document) .load fonctionnerait mieux, car il peut arriver que sur certains navigateurs les valeurs par défaut soient remplies plus tard? Est-ce qu'il se comporte de la même manière sur tous les navigateurs ou seulement sur certains d'entre eux?

+0

se comporte même sur ie et chrome – littlechris

+0

Je viens de regarder le code - êtes-vous sûr qu'il fait ce que vous voulez? En particulier, sous firefox, il ferait ce qui suit: 1) lier les événements 2) tirer 3x le gestionnaire d'événement click (avec les anciennes valeurs des cases à cocher) 3) changer l'état des cases à cocher Ne serait-ce pas mieux se lier à l'événement 'modifié' des cases à cocher? – ondra

+0

Ok, je pense que je l'ai eu. Si l'événement 'click' est déclenché après le clic, l'attribut 'checked' affiche l'état NEW. Si vous le lancez avec 'click()' ou 'trigger' ('click') ', il vous montrera l'état OLD. Cela peut être une erreur dans le code jquery. – ondra

1

Comment chargez-vous les valeurs sur la page? car normalement ce n'est pas un problème car ils sont dans la sortie html et JQuery attend jusqu'à ce qu'il soit chargé en utilisant la logique $ (function() {}

Comme votre déclencheur est dans la logique $ (function() {} il suffit d'exécuter l'événement clic tout de suite une fois que la page est chargée.

Si vous chargez les valeurs via ajax par exemple, vous devrez appeler la détente une fois l'appel ajax a terminé.

0

Qu'arrive-t- si vous enchaînez ces commandes à la place, par exemple,

$(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(); 
    } }).trigger('click'); 
}); 

Je soupçonne qu'avec votre script actuel, jQuery va et configure d'abord la fonction événementielle click, et comme cela est en train d'être mis en place, jQuery s'est ensuite déplacé pour mettre en place l'événement trigger.

Peut-être que si vous les enchaînez, jQuery sera forcé de terminer le segment de clic avant d'affecter le déclencheur?

Questions connexes