虽然这是在Breezingforms为Joomla创建的表单,但我的问题更多的是一般的javascript问题。我是javascript的新手,所以希望有人可以轻松回答这个问题。这是在初始化表单时调用的。
我在选择列表对象中使用javascript循环来隐藏/取消隐藏表单的各个部分,具体取决于选择列表选项。我试图让if / else if语句不那么笨拙。我确信有一种方法可以让它更简洁,更简洁,但作为一个新手,我还是无法弄明白。
在旁注(目前不是那么重要,但它会是这样),我想将此脚本用于其他选择列表调用,但有微小的变化。我仍然不太清楚重用代码。如果有人对此有任何意见,我们将不胜感激。
顺便说一下,我更喜欢jQuery的新手,所以如果你去那里,那就太好了! :)var selListVal = "";
var selListInput = JQuery("[name=\"mySelectionList[]\"]");
for (var i = 0; i < selListInput.length; i++)
if (selListInput[i].value) {
if (selListVal != "") selListVal += ",";
selListVal += selListInput[i].value;
}
if( selListVal == "myselection01" ){
ToggleFields('on', 'section', 'mysection01A', DeactivateField);
ToggleFields('on', 'section', 'mysection01B', DeactivateField);
}
else if( selListVal == "myselection02" ){
ToggleFields('on', 'section', 'mysection01A', DeactivateField);
ToggleFields('on', 'section', 'mysection01B', DeactivateField);
ToggleFields('on', 'section', 'mysection02A', DeactivateField);
ToggleFields('on', 'section', 'mysection02B', DeactivateField);
}
else if( selListVal == "myselection03" ){
ToggleFields('on', 'section', 'mysection01A', DeactivateField);
ToggleFields('on', 'section', 'mysection01B', DeactivateField);
ToggleFields('on', 'section', 'mysection02A', DeactivateField);
ToggleFields('on', 'section', 'mysection02B', DeactivateField);
ToggleFields('on', 'section', 'mysection03A', DeactivateField);
ToggleFields('on', 'section', 'mysection03B', DeactivateField);
}
else {
ToggleFields('off', 'section', 'mysection01A', DeactivateField);
ToggleFields('off', 'section', 'mysection01B', DeactivateField);
ToggleFields('off', 'section', 'mysection02A', DeactivateField);
ToggleFields('off', 'section', 'mysection02B', DeactivateField);
ToggleFields('off', 'section', 'mysection03A', DeactivateField);
ToggleFields('off', 'section', 'mysection03B', DeactivateField);
}
答案 0 :(得分:2)
这样的事情怎么样?
var num = parseInt(selListVal.replace('myselection', ''));
if(num > 0){
ToggleFields('on', 'section', 'mysection01A', DeactivateField);
ToggleFields('on', 'section', 'mysection01B', DeactivateField);
}
if(num > 1){
ToggleFields('on', 'section', 'mysection02A', DeactivateField);
ToggleFields('on', 'section', 'mysection02B', DeactivateField);
}
if(num > 2){
ToggleFields('on', 'section', 'mysection03A', DeactivateField);
ToggleFields('on', 'section', 'mysection03B', DeactivateField);
}
或通过user968951
var num = parseInt(selListVal.replace('myselection', ''));
for (var x=1; x<=num; x++){
ToggleFields('on', 'section', 'mysection0' + x + 'A', DeactivateField);
ToggleFields('on', 'section', 'mysection0' + x + 'B', DeactivateField);
}
答案 1 :(得分:2)
您可以使用switch语句并省略break
。通过这种方式,还将执行以下案件陈述。
switch(selListVal) {
case "myselection03":
ToggleFields('on', 'section', 'mysection03A', DeactivateField);
ToggleFields('on', 'section', 'mysection03B', DeactivateField);
case "myselection02":
ToggleFields('on', 'section', 'mysection02A', DeactivateField);
ToggleFields('on', 'section', 'mysection02B', DeactivateField);
default:
ToggleFields('on', 'section', 'mysection01A', DeactivateField);
ToggleFields('on', 'section', 'mysection01B', DeactivateField);
}
答案 2 :(得分:0)
您可以拆分字符串获取数字。然后你可以使用for循环来切换所有字段。
答案 3 :(得分:0)
我的建议是通过将类分配给您希望激活/停用的特定组来利用jQuery选择器。您可以为单个项目分配多个类,这样您就可以定义哪些字段应该以您希望的任何组合显示。例如:
<input type="textbox" class="selection myselection02 myselection03" />
<input type="textbox" class="selection myselection01 myselection03" />
<input type="textbox" class="selection myselection01 myselection02" />
然后你可以简单地使用这些行:
$(".selection").hide()
$("." + selListVal).show();
仅显示您想要的字段。
答案 4 :(得分:0)
我开始时使用switch .. case
编写类似于@Alex的答案,并省略break;
语句。
然而,虽然这很简洁并且缩短了你的代码,但它确实有缺点,它可能变得非常难以维护 - 如果你发现你需要添加一些应该适用的东西,比如选项2,那么你最终不得不重写整个事情。因此,除非你知道这是留下的方式,否则我会反对这一点,即使它很整洁。
更好的解决方案是调整您的部分和选择ID /值,以便选择的值包含将要切换的部分的ID。这样你根本不需要做任何条件代码;只需解析选择值并切换它告诉您的部分。