Отключение JavaScript и синхронизация - PullRequest
0 голосов
/ 21 июля 2011

Мне нужно обновить приложение, чтобы при нажатии пользователем кнопки и т. Д. Все поля ввода становились недоступными. Вот то, что у меня есть для javascript. Следующее работает и все, так что не беспокойтесь там.

function disableAllInputs() {
    var inputs = getAllInputs();
    for (i = 0; i < inputs.length; i++) {
        inputs[i].disabled = true;
    }
}


function enableAllInputs() {
    var inputs = getAllInputs();
    for (i = 0; i < inputs.length; i++) {
        inputs[i].disabled = false;
    }
}

function getAllInputs() {
    var inputs = document.getElementsByTagName('input');
    var selects = document.getElementsByTagName('select');

    var allInputs = new Array();

    var counter = 0;
    for (i = 0; i < inputs.length ; i++) {
        allInputs[counter] = inputs[i];
        counter++;
    }
    for (i = 0; i < selects.length; i++) {
        allInputs[counter] = selects[i];
        counter++;
    }

    return allInputs;
}

Теперь, в моем HTML, я в основном это:

<form name="MyForm" method="post" action="MyAction.do" onsubmit="onSubmit();">
    //form code
    <input type="submit" value="Save" name="submit" onclick="onSaveClick()" >
</form>

Кажется, все работает нормально. Однако мне нужно сделать все это тестируемым. Я хотел бы поставить задержку, чтобы все зависало, и тестер мог убедиться, что все отключено и т. Д. Но эта пауза должна быть временной и немедленно удаляемой без каких-либо возможных побочных эффектов (т.е. было бы неплохо вызвать паузу ( ), а затем просто удалите вызов).

Вот несколько вопросов:

1 - Если я вызываю метод disableAllInputs в методе onSaveClick, форма не отправляется (я полагаю, потому что кнопка была отключена).

2 - Если я вызываю метод disableAllInputs в методе onSubmit, пауза не работает.

Может кто-нибудь придумать способ безболезненной приостановки отправки формы после отключения кнопок? Я знаю о setTimeout и т. Д. Я просто не могу найти подходящее местоположение вызова и т. Д. Для использования. Ничто, кажется, не приостанавливает форму И в конечном итоге отправляет форму.

Кроме того, я бы поместил JS в отдельный файл .js, поэтому было бы неплохо, если бы я мог просто включить файл и добавить метод disableAllInputs, где это необходимо (то есть я бы хотел избежать тайм-аута по методу onSubmit и т. д.).

1 Ответ

1 голос
/ 21 июля 2011

Ну, вы можете вставить паузу, используя различные методы, но все эти методы приведут к тому, что вся страница перестает отвечать на запросы во время паузы.Простейшим примером этого будет окно с предупреждением.(Вы также можете использовать SJAX - синхронный AJAX.)

Вы можете остановить код, вызвав фатальную ошибку, например, вызвать функцию, которая не существует.stopJavascript(); Но это не позволило бы продолжить выполнение кода.

Единственный другой вариант - разделить функцию на две функции и использовать setTimeout для задержки вызова второй функции послепервый.Однако это будет сложнее реализовать и труднее удалить.

...