我的所有代码都运行正常,我只是想扩展它以适应所有可能性,知道必须有更好的方法来做到这一点,但不要认为我对javascript的了解(我刚开始)学习)。
基本上,我正在尝试根据我的Web应用程序上的复选框来检查数据库中的数据。有四个方框:“委员会”,“候选人”,“个人”,“意见”。
我的代码是:
if($('#committees').attr('checked')) {
$.get("file.pl",
{
act: "near",
format: "raw"
what: "committees"
}, NewData);
}
else {
$.get("file.pl",
{
act: "near",
format: "raw"
what: ""
}, NewData);
完全适用于委员会复选框,(其他框的ID与“what”的表名匹配,并匹配上述名称。我希望这对所有4个复选框都有效,没有必须为每个可能的复选框组合制作巨大的嵌套语句。
我知道我可以在“what”类别中列出更多选项,如下所示:
$.get("file.pl",
{
act: "near",
format: "raw"
what: "committees, candidates, individuals, opinions"
}, NewData);
这是有效的,但Idk如何动态更改该字符串以匹配检查哪些框。感谢您提供的任何帮助!
答案 0 :(得分:1)
即使您说您的代码有效,我也建议您使用.is(':checked')
代替.attr('checked')
:
然后你必须为每个复选框分配一个他们都会分享的类,比如.checkbox
。你的代码将是:
$('.checkbox').each(function() {
if($(this).is(':checked')) {
$.get("file.pl",
{
act: "near",
format: "raw"
what: this.id
}, NewData);
} else {
$.get("file.pl",
{
act: "near",
format: "raw"
what: ""
}, NewData);
}
});
<强>更新强>
我现在意识到像这样的构造确实需要一个闭包才能使它工作:
$('.checkbox').each(function() {
(function( that ) {
if($(that).is(':checked')) {
$.get("file.pl",
{
act: "near",
format: "raw"
what: that.id
}, NewData);
} else {
$.get("file.pl",
{
act: "near",
format: "raw"
what: ""
}, NewData);
}
})( this );
});
答案 1 :(得分:0)
你的意思是这样的吗?使用&#39;这个&#39;关键字。
HTML
<input type="checkbox" class="file-pl" id="committees" />
<input type="checkbox" class="file-pl" id="candidates" />
<input type="checkbox" class="file-pl" id="individuals" />
<input type="checkbox" class="file-pl" id="opinions" />
JS
$(".file-pl").click(function(){
var what = this.checked ? this.id : "";
$.get("file.pl", {
act: "near",
format: "raw"
what: what
}, NewData);
});
答案 2 :(得分:0)
不幸的是,上述答案并未奏效。最终工作的是:
var what string = "";
$('.filters').each(function() {
if($(this).is(':checked')) {
what string = whatstring+this.id+", ";
}});
$.get("file.pl",
{
act: "near",
format: "raw"
what: whatstring
}, NewData);