如何获取复选框的值并将其放入变量以插入数据库?
$request->param(cb) 没有得到这个值复选框位于mason2组件(.mc)中,复选框的值将传递给另一个组件 . 所以我必须找到一种方法来获得提交时的 Value这是code
$request->param(cb)
<input type="checkbox" name="cb" value="" onclick="$(this).attr('value', this.checked ? 1 : 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 . 但是,在某些情况下,您需要提交输入,单击按钮,使用链接等,因此它通常会派上用场 .
简化代码:
<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表单
cbf.mc
<form action="cbs"> <input type="checkbox" name="cb" value="1"> <input type="submit"> </form>
Mason2组件: cbs.mc #checkbox显示
cbs.mc
<%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 %>
更清晰并采用默认值 . 两个例子都是工作解决方案
我有一个类似的问题,并在尝试将其散列出来时偶然发现了这个帖子 . 在我的场景中,我有几个具有相同值的复选框(在数据库中每行认为“是/否”) . 我想出了一个简单易懂的解决方案 .
假设我们的值为'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);
3 回答
对于这样的任务,WWW :: Mechanize和HTML :: TokeParser的组合是你的朋友 . 前者通过单击按钮,链接等帮助您导航,后者切片并切割HTML .
在这种情况下,您只需导航到页面,扫描数据“输入”标签(即“复选框”是一种“输入”),然后测试每个输入以查看“名称”属性是否与您的属性相匹配之后 . 找到正确的“输入”标签后,您只需获取“已检查”属性的值,然后您就可以使用它了 .
例如:
在这个例子中,“导航”部分是微不足道的,你很可能没有WWW :: Mechanize . 但是,在某些情况下,您需要提交输入,单击按钮,使用链接等,因此它通常会派上用场 .
简化代码:
根据定义,当选中复选框时,浏览器将发送该值,如果未选中该复选框则不会发送任何内容 . 你想转换“ nothing " into " 0 ”,所以只需在你的Mason2组件中做:
因此,单击复选框时,将获得1,否则为0 .
添加完整示例:
Mason2组件:
cbf.mc
#checkbox表单Mason2组件:
cbs.mc
#checkbox显示制作上述两个组件,并将浏览器指向:
你会得到一个简单的表格 . 现在不选中或选中复选框(如您所愿)并按提交 . 组件
cbs.mc
将显示该值 . 选中时,如果不是"0",您将获得"1" .真的很简单 .
或者,您尝试以下
cbs.mc
更清晰并采用默认值 . 两个例子都是工作解决方案
我有一个类似的问题,并在尝试将其散列出来时偶然发现了这个帖子 . 在我的场景中,我有几个具有相同值的复选框(在数据库中每行认为“是/否”) . 我想出了一个简单易懂的解决方案 .
假设我们的值为'Y'(已选中)或'N'(未选中) .
为每个订单项添加“N”隐藏字段 . 这可确保您获得每行的值 . 然后,同名的复选框字段将告诉我们事物是否为“Y” . 假设4个元素与第二个和最后一个被检查的是qw(N N Y N N Y)的数组,你最终会得到什么 . 只需转换为字符串,将“NY”值换成“Y”并转换回来 . 你会得到合适的qw(N Y N Y) .