Javascript 复选框和一个输入给出了太多的if和else语句,如何减少?

Javascript 复选框和一个输入给出了太多的if和else语句,如何减少?,javascript,jquery,html,Javascript,Jquery,Html,我有以下问题 我有一个用(html和javascript)构建的页面,其中包含4个复选框(午餐、就餐、会面、休息)、一个输入字段(地名)和一个转到下一页按钮。这些复选框和输入字段都是可选的,也可以保留为空/未选中 如果我单击按钮并转到下一页,将显示一个来自硬编码json的列表,该列表由javascript生成: var myData = [ { "Name" : "Bla", "Placename" : "Amsterdam",

我有以下问题

我有一个用(html和javascript)构建的页面,其中包含4个复选框(午餐、就餐、会面、休息)、一个输入字段(地名)和一个转到下一页按钮。这些复选框和输入字段都是可选的,也可以保留为空/未选中

如果我单击按钮并转到下一页,将显示一个来自硬编码json的列表,该列表由javascript生成:

var myData = [ {
                 "Name" : "Bla",
                 "Placename" : "Amsterdam",
                 "lunch" : "true"
               },
               {
                 "Name" : "Bla2",
                 "Placename" : "Paris", 
                 "lunch" : "false",
                 "diner" : "true"
               },
               {
                 "Name" : "Bla3",
                 "Placename" : "London",
                 "meet" : "false",
                 "diner" : "true"
               },
               {
                 "Name" : "Bla4",
                 "Placename" : "Berlin"
               }];
现在的想法是,我检查选中了哪个复选框和/或插入了一个地名,我的操作如下:

 if(placename == ""){ 
    check json without checking placename..
 }else{
   if( ((lunchCheckbox == checked) && (element.lunch == "true")) && (Placename == element.Place)){ }
但这里的问题是,现在会有很多if语句,有没有更好的方法(使用更少的语句)


我考虑过一个循环,但想知道是否有更好的方法

我现在写这段代码。我把对账单的数目限制在两张以内。如果缺少一些东西,我会添加它

HTML:

<div class="form">
  Lunch : <input type="checkbox" id="lunch" class="detail"/>
  Diner : <input type="checkbox" id="diner" class="detail"/>
  Meet : <input type="checkbox" id="meet" class="detail"/>
  Rest : <input type="checkbox" id="rest" class="detail"/>
  </br>
  Placename : <input type="text" id="placename" class="detail"/>
  </br></br>
  <button id="next">next</button>
  </br></br>
  response
  </br>
  <textarea rows="30" cols="30" id="response"></textarea>
</div>
$(document).ready(function(){
    $("#next").click(function(){
        var json = {};

        $("input.detail").each(function(index, element){
          var el = $(element);

          if(el.attr("type") == "checkbox")
            json[el.attr("id")] = el.is(":checked");
          else if( el.attr("type") == "text" && el.val() != "")
              json[el.attr("id")] = el.val();
        });

        $("#response").val( JSON.stringify(json, undefined, 2) );
    });
});

有一个JSFIDLE示例。

是的,您可以对所有这些条件使用循环。但是,您仍然需要在数组或类似的数组中使用这些条件,因此,如果您不能以编程方式构建它们,则对当前代码没有任何影响。请描述一种编程方式,以便我向您展示一些示例代码。

我认为这将解决问题:

例如,如果你有四个复选框,分别称为:A、B、C、D,那么一个解决方案就是将这些复选框中的一部分组合起来。。例如A=0或1b=0或1等等。。然后将这些位相互结合,得到0000,这意味着ABCD都是假的,或者0001只有D是真的。之后,您可以将其保存为类似TotalBits=“0000”的字符串。然后使用json参数flunch=“true”=1执行此操作,并将总位保存在TotalBits2中。例如,最后检查位是否相同,然后执行以下操作:)

例如,如果你编码它

var aBit;
var bBit;
var cBit;
var dBit;

if(a == true){aBit="1"};
if(b == true){bBit="1"};
if(c == true){cBit="1"};
if(d == true){dBit="1"};

var totalBits1 = a+b+c+d; //which results in "1111"
午餐也一样,例如:

 var lunchBit;
 if(element.lunch == "true"){ lunchBit="1";};
 etcetera..

 var totalBits2 = lunchbit+dinerbit+.....; //which results in for example 1000..

最后检查totalBits1==totalBits2,然后生成结果..

无处,它需要一直添加请不要尝试混淆字符串和位掩码。如果真的需要的话,应该使用一系列布尔值。