使用jQuery从DropDownList项中删除选项

使用jQuery从DropDownList项中删除选项,jquery,asp.net,html,html-select,Jquery,Asp.net,Html,Html Select,我有一种情况,在某些情况下,dropdownlist可能包含一个不可选择的默认值,一旦另一个值被更改,默认值就不再是选项。据我所知,这个概念在本机上并不存在,所以我尝试用jQuery对其进行编码。所有具有此条件的DropDownList都为其分配了一个类“valueSkippedHyperSwap”。需要删除的值是插入符号“^”。这是我所拥有的,但不起作用: $('.valueSkippedHyperSwap').change(function () { var node

我有一种情况,在某些情况下,dropdownlist可能包含一个不可选择的默认值,一旦另一个值被更改,默认值就不再是选项。据我所知,这个概念在本机上并不存在,所以我尝试用jQuery对其进行编码。所有具有此条件的DropDownList都为其分配了一个类“valueSkippedHyperSwap”。需要删除的值是插入符号“^”。这是我所拥有的,但不起作用:

    $('.valueSkippedHyperSwap').change(function () {
        var node = $(this).has("value='^'");
        node.remove();
    });
根据人们的要求,这里是HTML,尽管我无法完全理解如何将其放入代码块中:

<!-- snip -->

<div class="questionItem">
<!-- snip -->
<select class="valueSkippedHyperSwap" id="answers_2__Answer" name="answers[2].Answer">
<option selected="selected" value="^">(^) Blank (skip pattern)</option>
<option value="0">(0) No</option>
<option value="1">(1) Yes</option>
<option value="-">(-) Not assessed</option>
</select></div>

<div class="questionItem">
<!-- snip -->
<select class="valueSkippedHyperSwap" id="answers_3__Answer" name="answers[3].Answer">
<option selected="selected" value="^">(^) Blank (skip pattern)</option>
<option value="0">(0) Clear speech-distinct intelligible words</option>
<option value="1">(1) Unclear speech-slurred or mumbled words</option>
<option value="2">(2) No speech-absence of spoken words</option>
<option value="-">(-) Not assessed</option>
</select></div>

<!-- snip -->

(^)空白(跳过模式)
(0)否
(1) 对
(-)未评估
(^)空白(跳过模式)
(0)清晰的语音清晰易懂的单词
(1) 含糊不清的话含糊不清或含糊不清的话
(2) 无言无语
(-)未评估

这里需要注意的一个关键问题是,有多个输入具有valueSkippedHyperSwap类名,因此在事件中,我们必须使用$(this)来确定正确的选项,不能进行其他搜索。

假设您的HTML是这样的

<select id="dd" class="valueSkippedHyperSwap"> 
    <option value="^">None</option>
    <option value="1">One</option>
    <option value="2">Two</option>    
</select>

jsFIDLE Sample

首先,我认为更改事件不会在select的选项更改时触发,而是在所选项目更改时触发。因此,除非用户先前选择的内容消失,并导致其他内容被选择,否则更改事件不会触发,请给出HTML!我们如何知道哪个元素具有ValueSkippedHyperSwap类,是
还是
?第三,您的
.has(“value=”^')
应该更像
.has(“[value=”^'])
。括号表示这是您正在查找的属性。第四:我看到您正在使用ASP。注意,因为asyncPostBack可以撤消jquery代码所做的一切。如您所见,只有您自己更改该值,更改事件才会触发。看起来不错,只是有多个输入具有valueSkippedHyperSwap类名,因此在事件中,我们必须使用$(this)来确定正确的选项,无法进行另一次搜索。@SamCarleton:由于我们使用的是类选择器,因此此代码将适用于指定css类的任意数量的选择/下拉列表。我认为由于$(“.valueSkippedHyperSwap选项[value=”^“])。remove();使用类类型时,它将从所有具有值SkippedHyperSwap类的select中删除值为^的选项。$(这)是选项,对吗?那么,移除不需要简单地从$(this)开始移动到父级,然后移除选项值为^的父级吗@萨姆卡尔顿:你说得对。我没有考虑最初的选择。是的,您可以使用$(this)更新该行@萨姆卡尔顿:我更新了答案。这里有一个例子
$(function(){

    $('.valueSkippedHyperSwap').change(function () {
       var item=$(this);
      if(item.val()!="^")
      {
        item.find("option[value='^']").remove();
      }
    });            

});