2013-07-31 70 views
0

我有一个HTML下拉菜单以及允许用户向菜单添加新选项的文本元素。我想确保所添加的每个选项都是唯一的。以下两行是我认为有效的第一个选项(对于所有选项,选项值= innHTML)。我想知道是否有更优雅的解决方案 - 第二条线看起来很笨重。它也不处理new_name字符串中的空格。Javascript/jQuery:确保添加到下拉菜单的唯一选项

var new_name = document.getElementById("preset_name").value 
var unique_name = $("option[value="+new_name+"]").length === 0 ? true : false 
+1

只是出于好奇,为什么你使用普通的JavaScript和jQuery? – putvande

+1

看起来没问题。我敢打赌三元是不需要的。 'unique_name = $(“option [value =”+ new_name +“]”)。length === 0'应该自己指定true或false。 – 2013-07-31 22:37:20

回答

0

你需要这样的东西吗?

HTML:

<select id="myselect"> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="mercedes">Mercedes</option> 
    <option value="audi">Audi</option> 
</select> 
<input id="newoption" type="text" /> 
<button id="check">Check</button> 

的jQuery:

$(document).ready(function() { 
    $("button#check").click(function() { 
     var newOpt = $("input#newoption").val(); 
     $("#myselect option").each(function(){ 
      var text = $(this).val(); 
      if(newOpt.length>0 && text.indexOf(newOpt)!=-1){ 
       console.log("already present!"); 
      } 
     }); 
    }); 
}); 

jsfiddle

+0

是的,这应该工作。不过,我猜想我想知道的是,如果有一种非常简洁的方式来获取选项值集合,则可以进行成员资格测试。 – LiavK

0

结合对这一问题的两点意见,你可以精简到1行:

var unique_name = $("option[value="+$("#preset_name").val()+"]").length === 0; 

你不需要三元,作为===导致true或false值。除非您再次需要测试值,否则您甚至不需要将其存储在变量中 - 您可以使用jQuery来检索它。

相关问题