вызовите perl-функцию по нажатию кнопки и заполните возвращаемое значение в текстовое поле в форме - PullRequest
0 голосов
/ 09 декабря 2018

Я совершенно новичок в мире HTML, Javascript и Web.Мое требование следующее:

Макет пользовательского интерфейса

username:   __________ |find button|
First name: __________
Last name:  __________
e-mail:     __________

Выполнено

  1. пользователь вводит имя пользователя в текстовое поле имени пользователя и нажимает кнопку поиска
  2. При нажатии кнопки поиска вызовите метод Perl getDetails("enteredUName")
  3. Захватите возвращаемое значение из вызванного метода Perl и заполните детали в оставшихся текстовых полях (имя, фамилия и адрес электронной почты).

У меня есть форма и логика поиска.

Теперь моя путаница заключается в том, что я должен добавить в атрибут -onClick кнопки search .В коде для форм всегда есть вызовы javascript, написанные для других кнопок.Итак, как мне сделать вызов метода Perl после нажатия кнопки поиска и заполнить оставшиеся текстовые поля?

Обновление

Исходя из моего текущего понимания, сделал следующее:

  1. Определен скрытый логический параметр isUsernameGiven с начальным значением 0 в форме
  2. Когда пользователь вводит что-то в текстовое поле с именем usernameText и нажимает кнопку поиска, вызывает javascript, который устанавливает значениеот isUsernameGiven до 1 и расположению окна с указанным действием.
  3. Действие направляется в файл модуля Perl через скрипт perl приложения.В этом модуле поиск выполняется по параметру usernameText
  4. . Появляется новая форма с предварительно заполненными деталями.

Структура кода

ApplicationDirectory
  application.pl
    ModuleFolder
        ModuleFile.pm

application.pl:
    ...
    if ($action eq 'save') {
        my $m = new ModuleFile();
    }
    ...


ModuleFile.pm:
    ...
    sub new {
        # param isUsernameGiven is preserved/carried over from previous??
        my $isUsernameGiven = param('isUsernameGiven');
        if ($isUsernameGiven != 0) {
            param(-name=>'isUsernameGiven',-value=>$isUsernameGiven);
        }
        if ( $action eq "add" ) {
            showAddForm($self);
        } elsif ($action eq "addEmp") {
            showAddForm($self, $self->getUserInfoFromActiveDir(param('usernameText')));
        }
    }
    sub getUserInfoFromActiveDir {
        # search info and return employee object
        ...
    }
    sub showForm {
        ...
        print "\n<form name=\"edit_employee_form\" method=\"post\" action=\"application.pl\" onSubmit=\"return validate_form();\">\n";
        print "<input type='hidden' name='isUsernameGiven' value='0'/>\n";

        print "<table class=edit style=\"width:420px;\">\n";
        my $findButton = '';
        if (!$id) {
            $findButton = "<td>\n".button(-value=>"Find", -class=>"bigbutton",
                -onClick=>"document.edit_employee_form.isUsernameGiven.value=1;getDetailsFilled();")."</td>";
        }
        my $fieldname = 'username';
        print "<tr><td>Username:</td><td > \n".textfield(-name=>$fieldname -default=$unameValue,".
            "-size=>30, -maxlength=>50)."</td>".$findButton."</tr><br>";

        print "<tr><td>First Name:</td><td > \n".textfield(-name=>'first', -default=>$fnameValue, -size=>30, -maxlength=>50)."</td></tr>\n";
        print "<tr><td class=edit>Last Name:</td><td > \n".textfield(-name=>'name', -default=$lnameValue, -size=>30, -maxlength=>50)."</td></tr>\n";
        ...
    }

ModuleFile.js:
    ...
    function getDetailsFilled()
    {
        if ( document.edit_employee_form.username.value == "" )
        {
            alert ( "Please fill in a username." );
            document.edit_item_form.username.focus();
        } else {
            // Call Perl method here
            window.location="application.pl?application=ModuleFile&action=addEmp";
        }
    }
    ...

Проблема

  1. При нажатии на кнопку поиска ничего не происходит.Что я пропустил?
  2. Кажется, что параметр isUsernameGiven становится неопределенным в подпункте showform.
    1. Значения параметров сохраняются или сбрасываются для каждого ModuleFile объекта?
    2. Как получается, что значение становится неопределенным, если для значения по умолчанию isUsernameGiven установлено значение 0?
    3. Правильно ли мое понимание параметров?
  3. Правильно ли мой текущий общий подход?

1 Ответ

0 голосов
/ 10 декабря 2018

Вы не можете сделать это без использования Javascript (ну, возможно, вы могли бы, но 99,9% ваших пользователей будут иметь браузеры, которые могут использовать Javascript только для программирования на стороне клиента).

Вам нужно сделатьэто выглядит так:

  • Установите обработчик событий Javascript на кнопке поиска, который захватывает значение имени пользователя и делает AJAX-вызов на ваш веб-сервер, включая имя пользователя.
  • НаписатьОбработчик AJAX, расположенный на вашем веб-сервере, который берет имя пользователя, вызывает ваш код, форматирует данные в виде JSON и возвращает эти данные в браузер.
  • Установите Javascript на веб-странице, которая принимает JSON, возвращенный из AJAXвызов, извлекает различные элементы данных и вставляет их в соответствующую часть страницы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...