2015-08-20 4 views
0

Перед тем, как задать вопрос, я не смог исправить эту проблему, но я не смог ее исправить.Форма отправить после завершения расчета скрипта

В принципе, у меня есть сайт, на котором пользователь может создать проект. Пользователь может добавить столько задач к этому проекту, сколько захочет, и каждая задача имеет число, которое добавляет к общей сумме в конце. Обычно функция Javascript (TotalSum()), которую я разработал для этого вычисления, работает отлично, но некоторые пользователи хотят иметь возможность использовать клавишу Enter для отправки формы. Хотя он действительно представляет форму, как и следовало ожидать, она не запускает функцию вычисления и вместо этого пропускает прямо к представлению формы. Это приводит к представлению чисел, которые могут быть более точными для расчетов.

TotalSum() запускается после того, как поле ввода номера изменено, и пользователь либо щелкает, либо нажимает кнопку «Отправить», либо все, что вы ожидаете, - все, кроме автоматического представления с помощью клавиши Enter.

Мое намерение состоит только в том, чтобы предоставить форму после функция завершила вычисление и заполнила все поля ввода новыми номерами. Как я мог лучше это сделать?

Я пробовал различные способы обойти это, но, как правило, предотвращение отправки формы также мешает мне отправить его снова.

$('#form_project').submit(function (e) { 
    TotalSum(); 
    // TotalSum(); is done calculating, proceed with submitting the form away! 
}); 

Я мог бы также использовать PHP просто сделать расчет после того, как форма передается, но кодирование в PHP, что Javascript уже работает хорошо само по себе, если он должным образом разрешено закончить вычисления с помощью клавиши Enter, просто кажется беспорядочным решением.

jQuery - это абсолютно вариант. Как мне лучше всего это сделать?

+0

Используйте ** [$ .deferred] (https://api.jquery.com/jquery.deferred/) ** –

+0

Как я могу лучше всего использовать .deferred (я думаю, что .allways или .done лучше всего послужит моим целям) для работы с моей функцией TotalSum()? Так что jquery позволяет TotalSum завершить, прежде чем приступать к отправке всей формы. – McScrooge

+0

Точно .. Он будет ждать завершения «обещания» –

ответ

0

Вы можете использовать JQuery для этой цели, и проверить, если клавишу ввода нажимается с помощью

$(document).keypress(function(key) { 
    if(key.which == 13) {  // 13 is ascii for enter key 
     //Use your totalSum function 
     TotalSum(); 
    } 
}); 
+0

Одна из моих попыток включала в себя то, что я делал именно это, но я считаю, что моей функции требуется несколько секунд, чтобы закончить вычисление - она ​​использует несколько анимаций, которые плавно изменяют числа, чтобы лучше проиллюстрировать пользователю, что расчеты происходят. Можно ли запустить мою функцию, даже если она занимает несколько секунд, прежде чем позволить отправке формы пойти на дикую природу? – McScrooge