Получите доступ к управлению asp:hiddenfield в JavaScript

Как было предложено Марком Мейером в комментариях, сделать startTimerWithAsyncCallback возвращение Обещания более удобным для тестирования

function startTimerWithAsyncCallback(
    firstAsyncFunction,
    secondAsyncFunction,
    thirdAsyncFunction,
    millis,
) {
    return new Promise((resolve) => {      // <==
        setTimeout(async () => {
            await firstAsyncFunction();
            await secondAsyncFunction();
            await thirdAsyncFunction();
            resolve();                     // <==
        }, millis);
    });
}


describe('Using async callbacks with timers', () => {
    test('fake timers', async () => {
        jest.useFakeTimers();

        const firstAsyncFunction = jest.fn();
        const secondAsyncFunction = jest.fn();
        const thirdAsyncFunction = jest.fn();

        const promise = startTimerWithAsyncCallback( // <==
            firstAsyncFunction,
            secondAsyncFunction,
            thirdAsyncFunction,
            1000,
        );
        jest.advanceTimersByTime(2000);

        await promise;  <==

        expect(firstAsyncFunction).toHaveBeenCalled();
        expect(secondAsyncFunction).toHaveBeenCalled();
        expect(thirdAsyncFunction).toHaveBeenCalled();
    });
});
5
задан Michael Kniskern 31 October 2008 в 16:01
поделиться

5 ответов

Мое понимание - то, при установке средств управления. Видимый = ложь во время начальной загрузки страницы, это не становится представленным в клиентском ответе. Мое предложение для решения проблемы

  1. Не используйте заполнителя, судящего по сценарию, Вам действительно не нужен заполнитель, если Вы не должны динамично добавлять средства управления на стороне сервера. Используйте отделение без runat=server. Вы можете всегда управлять видимостью того отделения, использующего CSS.
  2. Если необходимо добавить средства управления динамично позже, используйте заполнителя, но не устанавливайте видимый = ложь. Заполнитель не будет иметь никакого дисплея так или иначе, Набор видимость того заполнителя с помощью CSS. Вот то, как сделать это programmactically:

    placeholderId. Атрибуты ["стиль"] = "display:none";

Так или иначе, как другой указали, Ваши проблемы происходят, потому что, после того как Вы устанавливаете control.visible = ложь, это не становится представленным в клиентском ответе.

5
ответ дан 13 December 2019 в 05:44
поделиться

Если видимость заполнителя будет иметь значение false, то она никогда не будет представляться, и скрытое значение поля будет только сохранено в ViewState страницы.

всего один вопрос, почему Вы устанавливаете видимость заполнителя, чтобы быть ложью, если ее содержание скрытого поля?

Так или иначе один возможный способ преобладать над этой проблемой, добавляет объект TextBox или Маркировки и установил дисплей, стиль CSS его ни к "одному", затем в Вашем коде копируют то, что Вы включаете скрытое поле в textbox/lable текстовое свойство, этот способ, которым можно легко считать значение с помощью JavaScript, так как текстовое поле/маркировка будет представлено, но не видимое другим, хотя это не могло бы быть то, что безопасная вещь сделать.

1
ответ дан 13 December 2019 в 05:44
поделиться

Если Видимость будет иметь значение false серверную сторону, то заполнитель не будет представлен, и Вы не сможете получить доступ к чему-либо в нем от JavaScript. Ваш код должен работать, когда заполнитель видим = "верный"

Избавьтесь от заполнителя, оставьте скрытое поле пустым сначала, после того, как поиск заполнит его.

3
ответ дан 13 December 2019 в 05:44
поделиться

Видимый на самом деле не делает это видимым, можно оставить это значением по умолчанию. Просто runat = "сервер" и использование его.Value.

0
ответ дан 13 December 2019 в 05:44
поделиться

Вместо того, чтобы делать ".visible=false", измените стиль для "отображения:ничего;". Это представит Ваше управление, но сделает его невидимым.

1
ответ дан 13 December 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: