首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JQuery隐藏选择的选项

问用JQuery隐藏选择的选项
EN

Stack Overflow用户
提问于 2011-01-15 11:50:16
回答 6查看 23.7K关注 0票数 7

好的,让我们从一个例子开始。

记住,这只是一个例子。

<select id = "selection1"> <option value = "1" id = "1">Number 1</option> <option value = "2" id = "2">Number 2</option> <option value = "3" id = "3">Number 3</option> </select>

从这里开始,我们有一个下拉菜单,有3个选项。

我现在要做的是隐藏一个选项。

添加style = "display:none"将而不是帮助。

该选项不会出现在下拉列表中,但是使用箭头键,您仍然可以选择它。

从本质上讲,它完全按照代码的意思来做。它没有显示,就停在那里。

JQuery函数的$("#1").hide()不能工作。

另外,我不想隐藏这个选项,我想完全删除它。

有可能这样做吗?

我必须使用父/兄弟/子元素吗?如果是的话,我还是不知道怎么做。

一个相关的问题:我发现.remove()在JQuery中是可用的。效果很好。

但如果我想把它带回来呢?

如果(条件) { (这).remove(); }

我可以循环这个。不应该很复杂。

但我想做的是:

类的最大容量:(此处输入字段)

选择室:(在这里下垂)

我希望它所做的是使用诸如.change()或.keyup这样的函数来更新。

只有在输入了一些内容之后,我才能创建下拉列表。在更改或键控时,相应地执行下拉列表。

但我要做的是:

$roomarray =mysql_query(“选择*”) 从… ( 商业银行-转制-转制个案 当类型=‘教室’时,则为1 2.当类型=“计算机实验室”时 第三种类型=“讲堂”时的再转制 当类型=“礼堂”时,则为4种 成品率-转轨-转轨-最终作为ClassTypeValue 成本 (B).= 按ClassTypeValue、maxppl、roomID等方法订购);

代码语言:javascript
复制
echo "<select id = \"room\">";
                    
while ($rooms = mysql_fetch_array($roomarray))
    { ?>
    <option value=<?php echo $rooms['roomID']; ?> id=<?php echo $rooms['roomID']; ?>><?php echo $rooms['type']; echo "&nbsp;"; echo $rooms['roomID']; echo "&nbsp;("; echo $rooms['maxppl']; echo ")"; ?></option>
    <?php
    }
                    
echo "</select>";

是的,我知道这很乱。我打算以后再换。

但现在的问题是:我可以根据输入的内容切换删除选项吗?

是否有可能用一个循环下拉式来完成这个任务?因为我肯定不能一直执行SQL查询。或者这是一种选择?因为如果可能的话,我还是觉得很糟糕。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-01-15 12:21:33

皮()对Chrome不起作用..。我一直在尝试一种新的方法,并将其封装在一个名为"ExtraBox“的插件中。其想法是将选项临时存储,以便通过操作DOM来启用/禁用它们。我已经创建了插件,以使它更容易使用。

我已经在jsFiddle上发布了代码,所以您可以自己尝试一下:http://jsfiddle.net/KeesCBakker/HaFRC/。注:在jsFiddle的第一个项目,我喜欢它!

Html示例:

代码语言:javascript
复制
Select:
<br/>
<select id="TestKees">
    <option value="1" class="s1">First value</option>
    <option value="2" class="s2">Second value</option>
    <option value="3" class="s3">Third value</option>
</select>
<br/>
Enable / Disable
<br/>
<input id="txt" type="text" value="s2" />
<button id="btnEnable">Enable</button>

我将以下jQuery添加到我的document.ready函数中:

代码语言:javascript
复制
$('#TestKees').extraBox({ attribute: 'class' });

$('#btnEnable').click(function(){
    $('#TestKees').data('extraBox').enable(
        $('#txt').val()
    );
});

$('#btnDisable').click(function(){
    $('#TestKees').data('extraBox').disable(
        $('#txt').val()
    );  
});

该插件如下所示:

代码语言:javascript
复制
(function($) {

    // Create ExtraBox object
    function ExtraBox(el, options) {

        // Default options for the plugin (configurable)
        this.defaults = {
            attribute: 'class'
        };
        // Combine default and options objects
        this.opts = $.extend({}, this.defaults, options);

        // Non-configurable variables
        this.$el = $(el);
        this.items = new Array();
    };

    // Separate functionality from object creation
    ExtraBox.prototype = {

        init: function() {
            var _this = this;
            $('option', this.$el).each(function(i, obj) {
                var $el = $(obj);
                $el.data('status', 'enabled');
                _this.items.push({
                    attribute: $el.attr(_this.opts.attribute),
                    $el: $el
                });
            });
        },
        disable: function(key){
            $.each(this.items, function(i, item){
                if(item.attribute == key){
                     item.$el.remove();
                     item.$el.data('status', 'disabled'); 
                } 
            });
        },
        enable: function(key){
            var _this = this;
            $.each(this.items, function(i, item){
                if(item.attribute == key){

                    var t = i + 1; 
                    while(true)
                    {
                        if(t < _this.items.length) {   
                            if(_this.items[t].$el.data('status') == 'enabled')  {
                                _this.items[t].$el.before(item.$el);
                                item.$el.data('status', 'enabled');
                                break;
                            }
                            else {
                               t++;
                            }   
                        }
                        else {                                                                               _this.$el.append(item.$el);
                            item.$el.data('status', 'enabled');
                            break;
                        }                   
                    }
                } 
            });     
        }
    };

    // The actual plugin - make sure to test
    // that the element actually exists.
    $.fn.extraBox = function(options) {

        if (this.length) {
            this.each(function() {
                var rev = new ExtraBox(this, options);
                rev.init();
                $(this).data('extraBox', rev);
            });
        }
    };
})(jQuery);
票数 7
EN

Stack Overflow用户

发布于 2011-01-15 12:22:51

如果只想删除元素,为什么要乱搞显示设置?

代码语言:javascript
复制
$('#1').remove();

然后它就消失了。

票数 3
EN

Stack Overflow用户

发布于 2011-01-15 11:52:43

据我所知,这在本地是不可能的。您可以disable一个<option>节点。要完整地隐藏/删除它,您需要编写一些自定义代码。 $(‘选项’).attr(‘禁用’,真); 顺便说一句,您不应该使用单个数字作为元素的ID。使用某种前缀,即option_1。

实际上,隐藏<option>节点是可能的,但不能跨浏览器兼容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4699410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档