Jump to content

Проверка ввода текста и управление кнопкой с помощью JS в браузере


x11

Recommended Posts

Подскажите, как правильно сделать.

На форме есть несколько элементов ввода и кнопка. Некоторые элементы ввода обязательны для заполнения.

Как сделать проверку на стороне браузера? Т.к. чтобы кнопка была не активной, если хоть один из двух элементов ввода пустые.

Чтобы между браузером и сервером не было никаких ajax-сообщений во время проверки.

Чтобы было что-то вроде такого delphi-кода:


btnOK.Enabled := (edLogin.text <> '') and (edPass.text <> '')

 

Я так полагаю, что это будет в событии keypress. Но как в этом событии найти экземпляр кнопки и экземпляры двух элементов ввода?

К тому же не хочется писать разные процедуры для двух разных элементов ввода, т.е. хотелось бы, чтобы был один метод (функция), но присвоить ее обоим элементам ввода.

Под элементом ввода я подразумеваю uniEdit, просто в браузере это ведь другой тип.

Может есть уже что-то готовое, примеры?

Спасибо.

Screenshot_1.jpg

Link to comment
Share on other sites

Унигуи на любой чих типа смены фокуса у контролов или каких-то нажатий пингует сервер, так что я бы сказал ответ никак, хотя возможно я ошибаюсь и Шерзод сейчас закинет классную идею. А вообще то что бы хочешь это скорее в сторону вебкора смотреть надо, там именно как ты хочешь, сервер дергается строго мануально.

  • Like 1
Link to comment
Share on other sites

Я вижу несколько способов.

Первый способ:

procedure TMainForm.UniFormCreate(Sender: TObject);
begin
  UniEdit1.JSInterface.JSConfig('allowBlank', [False]);
  UniEdit2.JSInterface.JSConfig('allowBlank', [False]);
  UniButton1.JSInterface.JSAddListener('click', 'function(){return '+ Self.WebForm.JSForm.JSName +'.isValid()}');
end;

Второй способ:

Использовать привязки (bind).

...

  • Like 1
Link to comment
Share on other sites

14 hours ago, Sherzod said:

Второй способ:

Использовать привязки (bind).

по этому вопросу не нашел никакой информации

Link to comment
Share on other sites

Спасибо больше.

А еще подскажите пожалуйста, этот код:

UniButton1.JSInterface.JSAddListener('click', 'function(){return '+ Self.WebForm.JSForm.JSName +'.isValid()}');

для мобильной версии как будет выглядеть?

 

Link to comment
Share on other sites

2 minutes ago, x11 said:

А еще подскажите пожалуйста, этот код:


UniButton1.JSInterface.JSAddListener('click', 'function(){return '+ Self.WebForm.JSForm.JSName +'.isValid()}');

для мобильной версии как будет выглядеть?

UnimButton5.JSInterface.JSAddListener('tap', 'function(){return '+ Self.WebForm.JSForm.JSName +'.isValid()}');

 

Link to comment
Share on other sites

 

On 1/8/2021 at 3:01 PM, Sherzod said:

UnimButton5.JSInterface.JSAddListener('tap', 'function(){return '+ Self.WebForm.JSForm.JSName +'.isValid()}');

 

Еще вопрос. А как быть с TitleButtons (TUniButtonItems)?

Возможно ли на кнопку в заголовке мобильной формы повесить такой слушатель (JSAddListener)?

 

Link to comment
Share on other sites

2 hours ago, x11 said:

А как быть с TitleButtons (TUniButtonItems)?

Возможно ли на кнопку в заголовке мобильной формы повесить такой слушатель (JSAddListener)?

Еще раз уточните пожалуйста.

Link to comment
Share on other sites

Как повесить проверку не на обычную unimButtom, а на кнопку в заголовке мобильной формы?

допустим, я обозначил, что элемент ввода является обязательным для заполнения

UnimEdit1.JSInterface.JSConfig('required', [True]);

А как запретить пользователю нажимать кнопку в заголовке окна?

 

Ведь вот этот код я не смогу применить к TitleButtons (TUniButtonItems):

UnimButton5.JSInterface.JSAddListener('tap', 'function(){return '+ Self.WebForm.JSForm.JSName +'.isValid()}');

 

Link to comment
Share on other sites

29 minutes ago, x11 said:

Ведь вот этот код я не смогу применить к TitleButtons (TUniButtonItems):

 

Один из возможных решений:

procedure TMainmForm.UnimFormReady(Sender: TObject);
var
  I: Byte;
begin
  for I := 0 to TitleButtons.Count-1 do
    JSInterface.JSCode(#1'.element.addBeforeListener("tap",function(){return '+Self.WebForm.JSForm.JSName+'.isValid()});', TitleButtons[I].JSMenuItem);
end;

 

Link to comment
Share on other sites

В общем, этот код не помог.

Но, учитывая тот факт, что у кнопок в заголовке формы нет свойства ModalResult и ModalResult нужно указывать в коде, то я обошелся вот таким кодом:
 

procedure TfmmRefEdit.UnimFormTitleButtonClick(Sender: TUnimTitleButton);
begin
    if Sender.Index = 0 then
  begin
    if Trim(edName.Text).IsEmpty then
    begin
      ShowMessage('ошибка');
      exit;// нельзя закрывать форму
    end;

    ModalResult := mrOk;
  end;

end;

 

Link to comment
Share on other sites

2 hours ago, x11 said:

В общем, этот код не помог.

Но, учитывая тот факт, что у кнопок в заголовке формы нет свойства ModalResult и ModalResult нужно указывать в коде...

?

 

2 hours ago, x11 said:

то я обошелся вот таким кодом

OK

Link to comment
Share on other sites

1 minute ago, Sherzod said:

?

У обычной кнопки есть свойство ModalResult, которое может закрыть окно без дополнительного программного кода.

У кнопки TUniButtonItems нету такого свойства, поэтому в любом случае для TitleButton придется писать в коде:

ModalResult := mrOk;

 

Поэтому в данном случае можно перед (ModalResult := mrOk) сделать какую-нибудь дополнительную проверку.

Screenshot_5.jpg

Link to comment
Share on other sites

  • 3 weeks later...
On 1/8/2021 at 3:01 PM, Sherzod said:

UnimButton5.JSInterface.JSAddListener('tap', 'function(){return '+ Self.WebForm.JSForm.JSName +'.isValid()}');

 

В этом тестовом проекте не работает, форма UnimForm1 закрывается без лишних вопросов.

Для воспроизведения нажмите кнопку open на главной форме, а в открывшейся форме нажмите Close и форма закроется, хотя поле edName пустое.

uniGUI_SetReq.rar

Link to comment
Share on other sites

7 minutes ago, x11 said:

В этом тестовом проекте не работает, форма UnimForm1 закрывается без лишних вопросов.

Тогда попробуйте метод validate():

procedure AddCheckValidClick(uniButton: TUniCustomButton);
begin
  (UniButton as TUnimButton).JSInterface.JSAddListener('tap', 'function(){return '+ (UniButton.Owner as TUnimForm).WebForm.JSForm.JSName +'.validate()}')
end;

 

  • Like 1
Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...