Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除<;选项>;当自定义属性不等于x时 我所拥有的:_Javascript_Jquery_Html - Fatal编程技术网

Javascript 删除<;选项>;当自定义属性不等于x时 我所拥有的:

Javascript 删除<;选项>;当自定义属性不等于x时 我所拥有的:,javascript,jquery,html,Javascript,Jquery,Html,我有一个select元素。有些选项既有类(.filterable_option)又有自定义属性(数据客户端urn) 我需要的是: 根据另一个元素的on change事件,我需要从select元素中删除以下选项: …被归类为.filterable\u选项 …数据customattribute值不等于预定义变量的值(var=$some\u value) 我的代码: HTML: <select name="myselect_a"> <option selected="sele

我有一个select元素。有些选项既有类(
.filterable_option
)又有自定义属性(
数据客户端urn

我需要的是: 根据另一个元素的on change事件,我需要从select元素中删除以下选项:

  • …被归类为
    .filterable\u选项
  • …数据customattribute值不等于预定义变量的值(
    var=$some\u value
  • 我的代码: HTML:

    <select name="myselect_a">
        <option selected="selected"></option>
        <option value="Apply filter">Apply filter</option>    
    </select>
    
    <select name="myselect_b">
        <option selected="selected"></option>
        <option data-customattribute="58" value="1" class="filterable_option">Dog</option>    
        <option data-customattribute="58" value="2" class="filterable_option">Cat</option>
        <option data-customattribute="60" value="3" class="filterable_option">Parrot</option>
        <option>I have no class or custom attribute.</option>
    </select>
    
    $('#myselect_a').on('change', function() {
        var $myselect_a_option = $("#myselect_a").val();
        if($myselect_a_option === 'Apply filter'){  
            var $some_value = '58';
            $("select[name=myselect_b] option.filterable_option[data-customattribute!=" + $some_value + "]").remove();
        }
    });
    
    JSFiddle:

    为方便起见:

    我的问题是:
    我的代码没有删除选项中所需的。什么也没有发生。

    您在选择器中使用了一个名称。改为使用id,如下所示

    <select id="myselect_a">
        <option selected="selected"></option>
        <option value="Apply filter">Apply filter</option>    
    </select>
    

    您选择的选择器错误,以下位也已更正:
    name='myselect\u b']

    演示:


    请参见标记中的“名称”属性:

    <select name="myselect_a">
    

    这就是问题所在。

    +1对于问题的陈述,正如Neel所说的+1对于陈述,对于一个如此简单的错误,这是一个非常好的陈述;)是的,我不知道为什么有人否决了你。要么更改select属性,要么更改选择器。@Neel不确定您的意思,但是
    .on()
    适用于自1起的所有jQuery版本。7@ClarusDignus指定一个ID不仅对性能很有用,而且它允许元素被锚定,并允许标签引用它们。@Matthew-谢谢。根据您的回答,我将修改我的方法,并放弃在名称已经存在时避免定义ID。@Neel-确实如此。我只想花点时间审慎地考虑一下哪位议员最能回答我的问题。它可能是选择器的OCD:-)+1的潜在形式,但属性选择器不需要引号。如果属性值包含多个单词,则需要引号。使用它,这是一种很好的实践。@a.Wolff这不是一个动态值,我应该说是这个属性selector@RGraham是的,我刚刚明白你的意思+1。谢谢你的回答。我选择了尼尔的答案,因为他三分钟前按时间顺序回答了。我最初选择你的答案是因为它遵守了我的标记约定(使用名称而不是ID),但是Neel更新了他的答案,将这两个约定合并在一起。
    $('select[name="myselect_a"]').on('change', function() {
        var $myselect_a_option = $(this).val();
        if($myselect_a_option === 'Apply filter'){  
            var $some_value = '58';
            $("select[name='myselect_b'] option.filterable_option[data-customattribute!=" + $some_value + "]").remove();
        }
    });
    
    <select name="myselect_a">
    
    $('#myselect_a')