gpt4 book ai didi

javascript - 单击按钮调用 Perl 函数并将返回值填充到表单中的文本字段中

转载 作者:行者123 更新时间:2023-12-03 00:35:00 26 4
gpt4 key购买 nike

我对 HTML、JavaScript 和网络世界完全陌生。我的要求如下。

用户界面布局

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

待完成

  1. 用户在用户名文本字段中输入用户名并单击查找按钮
  2. 单击“查找”按钮时,调用 Perl 方法 getDetails("enteredUName")
  3. 捕获调用的 Perl 方法的返回值,并在剩余的文本字段中填写详细信息(名字、姓氏和电子邮件)。

我已经准备好表单和搜索逻辑。

现在我的困惑是我应该在搜索按钮的-onClick属性中放置什么。在代码中,对于表单,总是有为其他按钮编写的 JavaScript 调用。那么我应该如何在单击搜索按钮时调用 Perl 方法并填充剩余的文本字段?

更新

根据我目前的理解,做了以下工作:

  1. 定义了一个隐藏的 bool 参数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. 我目前的总体方法正确吗?

最佳答案

如果不涉及 Javascript,您就无法做到这一点(嗯,您可能可以,但 99.9% 的用户所拥有的浏览器只能使用 Javascript 进行客户端编程)。

你需要这样做:

  • 在查找按钮上设置一个 Javascript 事件处理程序,该处理程序会获取用户名值并对您的网络服务器(包括用户名)进行 AJAX 调用。
  • 在您的网络服务器上编写一个 AJAX 处理程序,该处理程序获取用户名、调用您的代码、将数据格式化为 JSON 并将该数据返回到浏览器。
  • 在网页中设置 Javascript,获取从 AJAX 调用返回的 JSON、提取各种数据项并将它们插入到页面的适当部分。

关于javascript - 单击按钮调用 Perl 函数并将返回值填充到表单中的文本字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53694356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com