Perl Mason 获取复选框的值



如何获取复选框的值并将其放入变量中以插入数据库?

$request->param(cb)没有得到价值
该复选框位于 mason2 组件 (.mc) 中,复选框的值将传递给另一个组件。所以我必须找到一种方法在提交
时获取值这是代码

<input type="checkbox" name="cb" value="" onclick="$(this).attr('value', this.checked ? 1 : 0)">  

简化代码:

<input type="checkbox" name="cb" value="1">  

根据定义,当选中复选框时,浏览器将发送值,如果未选中复选框,则不会发送任何内容。您希望将""转换为"0",因此只需在Mason2组件中执行以下操作:

has 'cb';
#... and where you need the 0/1 checkbox value simply use the $.cb
my $cb01 = $.cb ? 1 : 0;

因此,当单击复选框时,将得到 1,否则为 0。

添加完整示例:

泥瓦匠2组件:cbf.mc #checkbox形式

<form action="cbs">
    <input type="checkbox" name="cb" value="1">
    <input type="submit">
</form>

泥瓦匠2组件:cbs.mc #checkbox秀

 <%class>
 has 'cb';
 </%class>
 The checkbox value is: <% $.cb ? 1 : 0 %>

制作上述两个组件,并将浏览器指向:

 http://url/path/to/cbf

你会得到一个简单的表格。现在保持未选中状态或选中复选框(如您所愿)并按提交。组件cbs.mc将显示该值。选中后,您将获得"1"而不是"0"。

真的很简单。

或者,您尝试以下cbs.mc

<%class>
has 'cb' => (default => 0);
</%class>
The chebox value is: <% $.cb %>

更清晰并采用默认值。这两个示例都是有效的解决方案。

我有一个类似的问题,并在尝试解决它时偶然发现了这个线程。 在我的方案中,我有几个具有相同值的复选框(想想数据库中每行的"是/否")。 我想出了一个我认为简单易懂的解决方案。

假设我们的值将是"Y"(选中)或"N"(未选中)。

为每个订单项添加一个"N"隐藏字段。 这可确保收到每一行的值。 然后,同名的复选框字段将告诉我们事物是否为"Y"。 假设 4 个元素,第二个也是最后一个选中的元素是一个 qw(N N Y N N Y Y ) 数组,你最终会得到什么。 只需转换为字符串,将"NY"值交换为"Y",然后转换回来。你会得到正确的qw(N Y N Y)。

#HTML
%foreach ... {
<input type=hidden name=shouldwe value='N'><input type=checkbox name=shouldwe value='Y'>
%}
#Processing
$list = join('', @shouldwe);
$list =~ s/NY/Y/g;
@shouldwe = split(//, $list);

对于这样的任务,WWW::Mechanize 和 HTML::TokeParser 的组合是你的朋友。 前者通过单击按钮、链接等来帮助您导航,后者对 HTML 进行切片和切块。

在这种情况下,您只需导航到页面,扫描数据中的"输入"标签(即"复选框"是一种"输入"),然后测试每个输入以查看"name"属性是否与您所需的属性匹配。 一旦你找到了正确的"input"标签,那么你只需获取"checked"属性的值,然后你可以使用它。

例如:

use WWW::Mechanize;
use HTML::TokeParser;
my $checkbox_name = "cb";
my $url = 'http://some_url/';
my $page = WWW::Mechanize->new(autocheck =>1);
$page->get($url);
my $pagedata = HTML::TokeParser->new($page->{content});
while (my $token = $pagedata->get_tag("input")) {
    my @tokenarray = @$token;
    my $attr_ref = $tokenarray[1];
    my %attr = %$attr_ref;
    # dump the contents of the hash
    foreach my $k (keys %attr) {
        print "$k: $attr{$k}n";
    }
    print "n";
    if ($attr{name} eq $checkbox_name) {
        print "found it!n";
        print "status = ", $attr{checked}, "n";
        last;
    }
}

在这个例子中,"导航"部分是微不足道的,你可能没有WWW::Mechanize。 但是,在某些情况下,您需要提交输入,单击按钮,使用链接等,因此通常会派上用场。

相关内容

  • 没有找到相关文章

最新更新