2010-06-18 44 views
2

下正常工作:存儲的上下文不起作用

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

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

但下面不會在所有的工作:

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", ""); 
     } 
    } 

它被扔的錯誤是「「TXT。 val()。length'爲null或不是對象「。誰可以幫我這個事。

感謝

回答

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

這必須進入調用$()函數。否則,您正在嘗試在DOM準備好之前選擇文本框。

3

由於您的<script>塊處於<head>標籤,解析文檔之前它的執行。

因此,當您編寫txt = $('#TextBox1')時,該文本框實際上還不存在。

要解決這個問題,你需要設置文件加載後txt變量(內#(function() { ... })

例如:

var txt; 

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

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

TextBox1看起來像一個ASP.Net服務器端控制
如果是這樣,你應該將其替換爲$('<%= TextBox1.ClientID %>, since ASP.Net assigns its own unique IDs to server-side controls. Alternatively, in ASP.Net 4.0, you can add ClientIDMode =「Static」`到文本框。

此外,你應該給你的文本框一個有意義的名字。

1

var txt = $('#TextBox1');被執行時,該元素還不存在(DOM未完全加載)。

務必:

var txt; 

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

或把腳本在你結束HTML文檔。

傳遞給$()的函數在加載DOM時執行,即所有元素都存在。其實這樣做的目的是,你可以確定你可能訪問的所有元素都在那裏。