2010-08-24 4 views
0

J'ai un script en ligne sur ma page en tant que tel:fonction Javascript ne fonctionne qu'une fois

<script type="text/javascript"> 
    var rootPath = '<%= Url.Content("~/") %>'; 

    $(document).ready(function() { 

     $('#logonStatus').click(function() { loadLoginForm(); }); 
     alert('Document Ready'); 
    }); 

    function loadLoginForm() { 

     if(!serenity.tools.isStyleSheetLoaded('redmond.css')) { 
      $('head').append('<%= Url.StyleTag("Redmond/redmond.css", MediaTypes.Screen) %>'); 
     }    

     if(!serenity.tools.elementExists($('#logonContainer'))) { 
      $.ajax({ 
       async: false, 
       cache: false, 
       datatype: 'html', 
       success: function (data) { $('body').append(data); }, 
       type: 'GET', 
       url: '/Membership/LogOn' 
      }); 
     } 

     $('#logonContainer').dialog({ 
      modal: true,     
      hide: 'slide' 
     }); 
    } 


</script> 

Je suis également le chargement d'une coutume fichier javascript et le contenu de celui-ci sont en tant que tels:

var serenity = new function() { 

$(document).ready(function() { 

    jQuery.ajaxSetup({ 
     beforeSend: function (xhr) { 
      xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 
     } 
    }); 

}); 

this.tools = new function() { 

    this.isStyleSheetLoaded = function (fileName) { 

     $(document.styleSheets).each(function() { 
      if (this.href.toLowerCase().indexOf(fileName) != -1) { 
       this.isStyleSheetLoaded = true; 
       return; 
      } 
     }); 

     this.isStyleSheetLoaded = false; 
    } 

    this.elementExists = function (element) { 
     this.elementExists = element.length != 0; 
    } 
} 

}

Le fichier en cours de chargement par l'appel ajax est simplement un div avec une table contenant des éléments d'entrée. Le fichier ne contient aucun javascript. Mon problème est que la première fois que j'appelle isStyleSheetLoaded ça fonctionne très bien mais après que le fichier est chargé et la boîte de dialogue est affichée et fermée, je clique sur le lien qui déclenche la fonction loadLoginForm mais cette fois il dit isStyleSheetLoaded n'est pas un fonction. Cela apparaît dans tous les navigateurs, donc je suis sûr à 99% que c'est mon problème, mais je n'ai aucune idée de quoi il s'agit. Quelqu'un pourrait-il me diriger dans la bonne direction?

Merci d'avance.

Répondre

3

Je pense que votre problème est le suivant:

vous définissez une fonction "this.isStyleSheetLoaded = function (fileName)", mais dans son corps que vous overwride cette propriété "this.isStyleSheetLoaded = true;". Donc, après votre premier appel de isStyleSheetLoaded, la fonction est écrasée par un boolen.

le droit chemin pourrait être:

this.isStyleSheetLoaded = function (fileName) { 

     $(document.styleSheets).each(function() { 
     if (this.href.toLowerCase().indexOf(fileName) != -1) { 
      return true; 
     } 
     }); 

    return false; 
} 
+0

Ce fut, je vous remercie beaucoup. Je n'ai pas touché au javascript depuis des années et j'avais un problème pour renvoyer une valeur dans une autre fonction et j'ai fait une recherche et trouvé un blog disant que je devais mettre le nom de la méthode à la valeur pour le renvoyer. Merci beaucoup, dès que je peux, je vais accepter votre réponse. – joshlrogers

+1

+1 vaut la même chose pour renvoyer une valeur de 'elementExists'. Ce n'est pas VBScript! – bobince

Questions connexes