2012-08-24 124 views
0

我有我的Java脚本是全球性的变量。现在我每次调用内部函数时都会得到不同的值。我需要创建一个带有选定值的选项标签,如属性中的选项标签,以及一个用于没有基于变量的选定值的选项标签我想这是更令人困惑的让我给你一个例子。需要摆脱许多如果

var a1 = "a1c" // default value but may change 

if(a1 == "all") 
{ 
    var allstatusdefault = '<option value="all" selected="selected">All</option>'; 
} 
else 
{ 
    var allstatusdefault = '<option value="all" >All</option>'; 
} 

if(a1 == "a1b") 
{ 
    var allstatusdefault1 = '<option value="a1b" selected="selected">a1b</option>'; 
} 
else 
{ 
    var allstatusdefault1 = '<option value="a1b" >a1b</option>'; 
} 

if(a1 == "a1bc") 
{ 
    var allstatusdefault2 = '<option value="a1bc" selected="selected">a1bc</option>'; 
} 
else 
{ 
    var allstatusdefault2 = '<option value="a1bc" >a1bc</option>'; 
} 

这仅仅是样品,但我不得不产生很多不同的values.I选项标记的不想写了许多,如果..anybody有任何其他的想法?

+1

有很多方法来完成这样的事情。请为您的具体问题提供一些额外的背景。 – Kyle

+0

我想上面的代码解释了一切。只需要摆脱许多如果的。每次我得到不同的价值,并根据这个价值,我必须选择我需要选择哪个项目作为默认值。所以底线是一个值为两个选项的标签。 –

+0

添加选项并在最后选择一个。 – epascarello

回答

1

对于初学者,了解switch...case。就你而言,它看起来像你可能简单地通过将变量连接到一个字符串来简单地使用变量本身来形成字符串。

+2

假设每个'if' /'else'组合设置了一个独特的变量并且要么执行,'switch'可能会有点麻烦。 – pimvdb

+0

你能给我一个示例代码吗? –

2

从我可以扣除这里是你应该做的

var default1 = '<option value="'+a1+'" selected="selected">'+a1+'</option>'; 
var default2 = '<option value="'+a2+'" selected="selected">'+a2+'</option>'; 

由于a1值的字符串中重复使用,还不如干脆把它马上而不是使用多个if语句。

注:当你有很多的if语句其使用switch语句

+0

您不处理选定/未选定的零件。 – sachleen

3

提取公共代码的绝好机会,我在这里看到了很多重复的。

var a1 = "a1c"; 

function buildOption(id) { 
    var selected = (a1 == id? ' selected="selected"' : ''); 
    return '<option value="' + id + '"' + selected + '>' + id + '</option>'; 
} 

var allstatusdefault = buildOption('all'); 
var allstatusdefault1 = buildOption('a1b'); 
var allstatusdefault2 = buildOption('a1bc'); 
+0

你不需要'buildOption'中的'return'吗? –

+0

@DourHighArch:当然太多了[标签:scala],修正,谢谢! –

0
var a1 = "a1bc" // default value but may change 
    switch(a1) 
     { 
     case "all" : allstatusdefault = '<option value="all" selected="selected">All</option>';break; 
     case "a1b" : allstatusdefault = '<option value="a1b" selected="selected">a1b</option>'; break; 
     case "a1bc" : allstatusdefault = '<option value="a1bc" selected="selected">a1bc</option>'; break; 
     default : allstatusdefault = '<option value="all" >All</option>';break; 
     } 
    window.alert(allstatusdefault); ​ 
+0

我想我不知道上面的代码是如何工作的。因为如果allstatusdefault没有值“a1b”比我需要用它的值生成选项标签,如。在这种情况下,默认应始终具有“全部”的价值。我不想那样.. –

+0

很明显,你不明白它是因为你的许多ifs,这可能会导致意想不到的结果。 这里发生的是字符串a1被遗漏。如果它匹配单词'case'后面的任何字符串,那么它会执行':'和'; break;'之间的所有内容:'default:'后面的内容是当字符串a1与任何情况都不匹配时会发生什么。 你可以在那里填写你想要的任何值。 – Tschallacka

-1

我想从你写的代码,你可以做一个与使用jQuery的方式。首先创建整个HTML,所有选项值使用jQuery对象,如下所示:

var $optionHTML = $('<option value=""> Blahblah </option>'); 现在你可以将这个jquery函数应用于这个家伙。所以你附加了一个像这样的新选项。

$optionHTML.append('<option>...</option>')

当你与所有的选项元素使用jQuery选择方法是为了找到具有价值属性相匹配,以a1c然后添加属性selected然后你做选择的元素。

如果您需要一些初学者的代码,请告诉我。

谢谢。

编辑:

下面是答案

<html> 
<head> 
    <script type = "text/javascript" src= "http://code.jquery.com/jquery-1.8.0.min.js"></script> 
    <script type = "text/javascript"> 
     $(document).ready (function() { 
      var value = "test 2"; 
      $select = $("<select></select>"); 
      $optionHTML1 = $('<option value="test 1">Test 1</option>'); 
      $optionHTML2 = $('<option value="test 2">Test 2</option>'); 
      $optionHTML1.appendTo($select); 
      $optionHTML2.appendTo($select); 
      $select.find("[value='test 2']").attr('selected','selected'); 
      alert($select.html()); 
      $("div").append($select); 
     }); 
    </script> 
    <style type = "text/css"> 
    </style> 
</head> 
<body> 
    <div> 
    </div> 
</body> 

+0

即使您在选择框中有200个选项值,该代码也可以正常工作。你不必应用开关,它可以正常工作,并且可以扩展。 –

+0

我正在寻找建立一个字符串与我的所有条件的HTML建设时间..谢谢 –

+0

@ravipatel但是,因为你正在使用的选项,可能只有一个值,可以从选项中选择正确的,然后这个解决方案wotk.I我正在尝试它。谢谢。 –