цикл javascript не принимает значение идентификатора - PullRequest
2 голосов
/ 13 декабря 2010

Учтите, что у меня есть 10 полей ввода (с использованием плагина datepicker Fyi)

У меня есть определенный набор требований для того, когда щелкают по полю ввода, или когда нажимаются также плюсы / минусы (чтобы показать / скрыть 10 полей при необходимости).

Кажется, что этот цикл не принимает переменные x и y.

предупреждение у меня всегда эхо 6 например .. НИКАКОГО ПОЧЕМУ ..

вот мой цикл ... и идеи, почему x и y не установлены?

for (var x = 1; x <= 10; x++) {
    var y = x+1;
    $('#date_start'+y).attr("disabled", "disabled");
    $('#date_start'+x).datetimepicker();

    $('#date_start'+x).blur(function() {
        if (isset($('#date_start'+x).val())) {
            $('.add_time_'+x).css('visibility', 'visible');
        } else {
            $('.add_time_'+x).css('visibility', 'hidden');
            $('.rem_time_'+y).css('visibility', 'hidden');
        }
    });

    $('.add_time_'+x).click(function() {
        alert('ici: ' + y);
        $('.date_'+y).css('visibility', 'visible');
        $('#date_start'+y).removeAttr("disabled");
        $('.rem_time_'+y).css('visibility', 'visible');
    });

    $('.rem_time_'+y).click(function() {
        $('.date_'+y).css('visibility', 'hidden');
        $('#date_start'+y).attr("disabled", "disabled");
        $('#date_start'+y).val('');
        $('.rem_time_'+y).css('visibility', 'hidden');
        $('.add_time_'+y).css('visibility', 'hidden');
    });
}

=== Обратите внимание, isset, это отдельная функция, я должен проверить, является ли значение поля пустым / не установлено Когда я пытаюсь вывести значение $ ('# date_start' + x) .val ()

оно не определено ... даже если соответствующий вход имеет значение на экране.

1 Ответ

2 голосов
/ 13 декабря 2010

При использовании внешних переменных в обработчиках событий вам нужно обернуть свои замыкания.Давайте возьмем ваш пример:

$('#date_start'+x).blur(function() {
        if (isset($('#date_start'+x).val())) {
            $('.add_time_'+x).css('visibility', 'visible');
        } else {
            $('.add_time_'+x).css('visibility', 'hidden');
            $('.rem_time_'+y).css('visibility', 'hidden');
        }
    });

Это всегда будет использовать последнее значение внешних переменных x и y, а не значение во время создания этого обработчика события.Что вам нужно сделать, это обернуть его в немедленно выполненную функцию:

$('#date_start'+x).blur((function(xlocal, ylocal) {
        return function() {
            if (isset($('#date_start'+xlocal).val())) {
                $('.add_time_'+xlocal).css('visibility', 'visible');
            } else {
                $('.add_time_'+xlocal).css('visibility', 'hidden');
                $('.rem_time_'+ylocal).css('visibility', 'hidden');
            }
        }
    })(x,y));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...