сохраненный контекст в переменной JQuery не работает - PullRequest
2 голосов
/ 18 июня 2010

отлично работает следующее:

    $(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» является нулем или не объектом). Может ли кто-нибудь помочь мне в этом.

спасибо

Ответы [ 3 ]

4 голосов
/ 18 июня 2010
var txt = $('#TextBox1');

Это должно входить в функцию, которая находится в вызове $(). В противном случае вы пытаетесь выделить текстовое поле до того, как DOM будет готов.

3 голосов
/ 18 июня 2010

Поскольку ваш блок <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 голос
/ 18 июня 2010

Когда выполняется var txt = $('#TextBox1');, элемент еще не существует (DOM загружен не полностью).

Do:

var txt;

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

или поместите скрипт в конец HTML-документа.

Функция, переданная в $(), выполняется при загрузке DOM, то есть все элементы существуют. На самом деле цель этого в том, что вы можете быть уверены, что все элементы, к которым вы можете получить доступ, есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...