首页 文章

Perl Mason获得一个复选框的值

提问于
浏览
-2

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

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

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

3 回答

  • 0

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

    在这种情况下,您只需导航到页面,扫描数据“输入”标签(即“复选框”是一种“输入”),然后测试每个输入以查看“名称”属性是否与您的属性相匹配之后 . 找到正确的“输入”标签后,您只需获取“已检查”属性的值,然后您就可以使用它了 .

    例如:

    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 . 但是,在某些情况下,您需要提交输入,单击按钮,使用链接等,因此它通常会派上用场 .

  • 3

    简化代码:

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

    根据定义,当选中复选框时,浏览器将发送该值,如果未选中该复选框则不会发送任何内容 . 你想转换“ nothing " into " 0 ”,所以只需在你的Mason2组件中做:

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

    因此,单击复选框时,将获得1,否则为0 .

    添加完整示例:

    Mason2组件: cbf.mc #checkbox表单

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

    Mason2组件: cbs.mc #checkbox显示

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

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

    http://url/path/to/cbf
    

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

    真的很简单 .

    或者,您尝试以下 cbs.mc

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

    更清晰并采用默认值 . 两个例子都是工作解决方案

  • -1

    我有一个类似的问题,并在尝试将其散列出来时偶然发现了这个帖子 . 在我的场景中,我有几个具有相同值的复选框(在数据库中每行认为“是/否”) . 我想出了一个简单易懂的解决方案 .

    假设我们的值为'Y'(已选中)或'N'(未选中) .

    为每个订单项添加“N”隐藏字段 . 这可确保您获得每行的值 . 然后,同名的复选框字段将告诉我们事物是否为“Y” . 假设4个元素与第二个和最后一个被检查的是qw(N N Y N N 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);
    

相关问题