Javascript 复选框和一个输入给出了太多的if和else语句,如何减少?
我有以下问题 我有一个用(html和javascript)构建的页面,其中包含4个复选框(午餐、就餐、会面、休息)、一个输入字段(地名)和一个转到下一页按钮。这些复选框和输入字段都是可选的,也可以保留为空/未选中 如果我单击按钮并转到下一页,将显示一个来自硬编码json的列表,该列表由javascript生成:Javascript 复选框和一个输入给出了太多的if和else语句,如何减少?,javascript,jquery,html,Javascript,Jquery,Html,我有以下问题 我有一个用(html和javascript)构建的页面,其中包含4个复选框(午餐、就餐、会面、休息)、一个输入字段(地名)和一个转到下一页按钮。这些复选框和输入字段都是可选的,也可以保留为空/未选中 如果我单击按钮并转到下一页,将显示一个来自硬编码json的列表,该列表由javascript生成: var myData = [ { "Name" : "Bla", "Placename" : "Amsterdam",
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,然后生成结果..无处,它需要一直添加请不要尝试混淆字符串和位掩码。如果真的需要的话,应该使用一系列布尔值。