2010-06-18 5 views
2

Les travaux suivants fins:contexte stocké dans une variable JQuery ne fonctionne pas

$(function() { 
     EnableDisableButtons(); 
     $('#TextBox1').keyup(function() { 
      EnableDisableButtons(); 
     }); 
    }); 

    function EnableDisableButtons() { 
     var len = $('#TextBox1').val().length; 
     if (len == 0) { 
      $("#Button1").attr("disabled", "disabled"); 
     } 
     else { 
      $("#Button1").attr("disabled", ""); 
     } 
    } 

Mais ce qui suit ne fonctionne pas du tout:

var txt = $('#TextBox1'); 

    $(function() { 
     EnableDisableButtons(); 
     txt.keyup(function() { 
      EnableDisableButtons(); 
     }); 
    }); 

    function EnableDisableButtons() { 
     var len = txt.val().length; 
     if (len == 0) { 
      $("#Button1").attr("disabled", "disabled"); 
     } 
     else { 
      $("#Button1").attr("disabled", ""); 
     } 
    } 

L'erreur qu'il vomissait était « txt. val(). length 'est null ou non un objet ". Quelqu'un peut-il m'aider à ce sujet.

grâce

Répondre

4
var txt = $('#TextBox1'); 

Ceci doit aller dans la fonction de l'appel $(). Sinon, vous essayez de sélectionner la zone de texte avant que le DOM est prêt.

3

Depuis votre bloc <script> est dans la balise <head>, il est l'exécution avant que le document est analysé.

Par conséquent, lorsque vous écrivez txt = $('#TextBox1'), la zone de texte n'existe pas encore.

Pour résoudre ce problème, vous devez définir la variable txt après le chargement de documents (à l'intérieur #(function() { ... })

Par exemple:.

var txt; 

$(function() { 
    txt = $('#TextBox1'); 

    EnableDisableButtons(); 
    txt.keyup(function() { 
     EnableDisableButtons(); 
    }); 
}); 

TextBox1 ressemble à un côté serveur ASP.Net
Si oui, vous devez le remplacer par $('<%= TextBox1.ClientID %>) , since ASP.Net assigns its own unique IDs to server-side controls. Alternatively, in ASP.Net 4.0, you can add ClientIDMode = "Statique" `dans la zone de texte.

De même, vous devez donner un nom significatif à votre zone de texte.

1

Lorsque var txt = $('#TextBox1'); est exécuté, l'élément n'existe pas encore (le DOM n'est pas chargé complètement).

Do:

var txt; 

$(function() { 
    text = $('#TextBox1'); 
    EnableDisableButtons(); 
    txt.keyup(function() { 
     EnableDisableButtons(); 
    }); 
}); 

ou mettre le script à la fin de vous document HTML.

La fonction transmise à $() est exécutée lorsque le DOM est chargé, c'est-à-dire que tous les éléments existent. En fait, le but de ceci est que vous pouvez être sûr que tous les éléments auxquels vous pourriez avoir accès sont là.

Questions connexes