JQuery中的逻辑,使用复选框进行更新

时间:2014-10-12 19:02:58

标签: javascript jquery database checkbox logic

我的所有代码都运行正常,我只是想扩展它以适应所有可能性,知道必须有更好的方法来做到这一点,但不要认为我对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如何动态更改该字符串以匹配检查哪些框。感谢您提供的任何帮助!

3 个答案:

答案 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);