javascript - 自定义 jQuery 选择框

标签 javascript jquery

我可以自定义此插件,以便单击文档中除选择框之外的任何其他位置时 - 它会关闭吗?我尝试为 body 标记添加点击事件,但似乎不起作用..

html

<select>
    <option value="1">1</option>
    <option value="2">2</option>
</select>

CSS

.selectbox {
    width: 100px;
    border: 1px solid #000;
    padding: 2px 5px;
}
.list {
    background-color: #eee;
    border: 1px #ddd solid;
    padding: 0;
    position: absolute;
    list-style: none;
    width: 100%;
}
.list li:hover {
    color: #fff;
    background-color: #00f;
}

js

! function(t) {
return t.fn.selectbox = function(e) {
    var i;
    return i = t.extend({
        customList: !1
    }, e), this.each(function() {
        var e, n, s, c;
        return s = t(this).css({
            opacity: 0,
            position: "absolute",
            "z-index": 2,
            top: 0,
            width: "100%",
            height: "100%"
        }), i.customList && (n = s.children()), c = s.wrap("<div class='selectbox'></div>").parent().css({
            position: "relative"
        }), c.append("<span class='value'>" + s.val() + "</span>"), i.customList && (s.hide(), e = c.append("<ul class='list'></ul>").find("ul"), n.each(function() {
            return e.append("<li>" + this.text + "</li>")
        }), e.hide()), s.on("change", function() {
            return c.children(".value").text(t(this).val()), !1
        }), i.customList && (c.click(function() {
            return e.toggle(), !1
        }), e.children().click(function() {
            return e.toggle(), s.val(n.eq(e.children().index(this)).attr("value")).trigger("change"), !1
        })), t(this)
    })
}, !1
}(jQuery);

并使用此代码连接插件

$('select').selectbox({customList: true});

这里是JsFiddle DEMO

最佳答案

您可以像这样隐藏选项,绑定(bind)单击文档并检查选择框是否被单击,然后隐藏。

$(document).on('click',function(e){
    if(!$(e.target).is('select')){
        $('.selectbox ul').hide();
    }
});

DEMO

关于javascript - 自定义 jQuery 选择框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25997984/

相关文章:

javascript - 如何在 jQuery ajax 函数中使用 URL 变量?

javascript - 带有 Spritely 的 jQuery Sprite

javascript - 为什么我的导航栏折叠切换在 react 中不起作用

javascript - 如何将容器 div 及其所有内容缩放到特定大小?

Javascript 附加对象不保证顺序

php - 如何使用 php 和 javascript 为特定结果显示正确的图像?

javascript - 如何避免在页面加载时调用 knockout 绑定(bind)?

javascript - 滚动时停止移动元素移动

javascript - 隐藏列表 jQuery 中的最后 3 个元素

xml - jQuery.ajax 解析 XML