我有两个问题:
我希望用户在下拉列表中添加值,但在此之前我正在使用此函数检查该值是否已存在:
function IsNameAlreadyPresent(List,Name){
$.each($("'#'+List option"),function(i,e){
if(e.innerHTML == Name){
return true;
}
});
}
function AddOptionName() {
var Name = $("#txtName").val();
if(IsNameAlreadyPresent(List,Name)) {
alert("Name \"" + Name + "\" already exists. \nPlease type an unique name.")
}
else{
AddNewOption(Name);
}
}
我想在我的代码中多次使用同一个函数,通过传递下拉列表的id和要输入的名称来检查输入的值是否唯一。但不知怎的,这不起作用。
如何将id作为参数($("'#'+List option")
传递?
我也使用相同的功能来编辑选项的文本。但不知何故,如果用户点击编辑并且他不想更改文本并单击“确定”,则会提示该选项已存在。 该选项只包含一次在弹出窗口中打开的选项。怎么检查这个?
var x = document.getElementById("List");
var l_sName = x.options[x.selectedIndex].text;
$("#List option[value="+l_sName+"]").remove();
答案 0 :(得分:1)
您的选择器错误,应为$("#"+List+" option")
。 return
内的$.each()
也不会从您的函数返回,但如果为false则会中断$.each()
。将您的IsNameAlreadyPresent(List,Name)
更改为此:
function IsNameAlreadyPresent(List, Name) {
var result = false;
$.each($("#"+List+" option"), function (i, e) {
if (e.innerHTML == Name) {
result = true;
return false;
}
});
return result;
}
对于此部分,您可以添加要排除以进行检查的名称,例如:
function IsNameAlreadyPresent(List, Name, Excluded) {
var result = false;
$.each($("#"+List+" option"), function (i, e) {
if (e.innerHTML == Name && e.innerHTML != Excluded) {
result = true;
return false;
}
});
return result;
}
function AddOptionName(Excluded = "") {
var Name = $("#txtName").val();
if (IsNameAlreadyPresent(List, Name, Excluded)) {
alert("Name \"" + Name + "\" already exists. \nPlease type an unique name.")
} else {
AddNewOption(Name);
}
}
然后使用AddOptionName( $("#"+List+" option:selected").html() );