0

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

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

2 回答 2

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

于 2013-07-31T23:23:56.197 回答
0

结合对问题的两条评论,您可以简化为 1 行:

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

您不需要三元,因为 === 会产生真值或假值。除非您再次需要测试值,否则您甚至不需要将其存储在变量中 - 您可以使用 jQuery 检索它。

于 2013-07-31T22:44:19.150 回答