2012-12-12 3 views
1

J'ai une page asp.net et quand une zone de texte est vide, j'ai besoin de cacher toute la page du code derrière. Le problème est que javascript et jquery code est exécuté sur document prêt et obtient des données à partir de certains contrôles de page et puisque les contrôles ne sont pas rendus ce code échoue et déclenche une exception.Meilleure approche pour éviter l'exécution de javascript lors du chargement ou de la mise en page?

à code derrière i cacher la page entière

// allPageTable is an html table 
// with runat=server 
this.allPageTable.Visible = false; 

A Javascript je vérifie si une zone de texte est nulle, sinon donc je lance le code, sinon je ne le fais pas. Mais mytxt n'est pas défini de sorte qu'il entre dans le if et échoue.

if ($('#myTxt') != null) { 
    // My JQUERY/JS CODE 
    var data = $('#anotherTxt').val(); // Fails cause anotherTxt is not rendered 
} 

J'ai donc besoin d'un moyen d'éviter l'exécution de javascript lorsque la page n'est pas rendue.

Répondre

3

Le sélecteur $('#myTxt') ne renverra pas null lorsque vous contrôlez avec id, myTxt n'existe pas. Vous devez vérifier le length de l'objet retourné par le sélecteur.

if ($('#myTxt').length > 0) { 
    // My JQUERY/JS CODE 
    var data = $('#anotherTxt').val(); // Fails cause anotherTxt is not rendered 
} 
1

Tout d'abord, vous avez besoin de ce script exécuté sur "documentReady", "onLoad" est pas si nécessaire. Pour vérifier si la case à cocher existe ou non, vous pouvez utiliser $('#myTxt').length > 0 car tout ce qui est retourné par le mécanisme du sélecteur jQuery est représenté dans un tableau d'éléments, même si c'est un élément html.

$(window).load s'exécute après que tout est chargé et que la page html a été rendue avec css inclus. Si votre script fonctionne sur Windows, vous obtiendrez un effet "clignotement". (Disparaître après tout est rendu)

0
var i = 0; 

var interval = setInterval(function() { 
    i = i + 1; 

    if(typeof($('#myTxt')) != 'undefined') { 
     // do your stuff 
     clearInterval(interval); 
    } 

}, 1000); 

Ne pas si elle est meilleure approche, peut-être quelqu'un d'autre poster meilleur ...

0

Vous pouvez placer votre code javascript dans un contrôle Placeholder puis définissez la visibilité de ce contrôle de la même manière que vous l'avez définie pour la table html. De cette façon, votre script ne finira pas sur la page. Il faut un peu plus de soin pour éviter les «usages brisés» des fonctions/variables, mais c'est une solution générale.

<table id="allPageTable" runat="server"> 
    ... 
</table> 

<%= "<script type=\"text/javascript\" language=\"javascript\">" %> 
<asp:PlaceHolder runat="server" ID="PlaceholderJS"> 
    javascript code here 
</asp:PlaceHolder> 
<%= "</script>"%> 

.

this.allPageTable.Visible = PlaceholderJS.Visible = false; 
Questions connexes