首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下拉Selectize.js链接

下拉Selectize.js链接
EN

Stack Overflow用户
提问于 2015-10-19 04:33:32
回答 1查看 1.8K关注 0票数 3

我正在尝试在选择下拉列表上放置一个链接,以便允许用户执行一个操作,而不是选择一个项,同时仍然允许用户选择项目作为主选项。

以下是我想要实现的目标(但并不像预期的那样起作用):

我所做的就是清楚地在HTML上插入链接。但是它不起作用,我想对于某种事件传播停止,是否可以通过选择来实现呢?

还没有人回答,我想还有更多的话要说,下面是我所做的一个例子:

代码语言:javascript
复制
render: {
    option: function(item) {
        return '<div><span>'+item.label+'</span>'
            + '<div class="pull-right">'
            + '<a href="#link">Link</a>'
            + '</div></div>';
    }
}

如您所见,我确实更改了“选项”呈现化,并在普通HTML中插入了一个链接。问题是,-as显示在图像上--当我单击链接时,浏览器不跟随链接,而是执行选择的默认操作,即选择单击的元素。

我想要实现的是,让它跟随链接时,点击。

下面是我所做的事情的一个小提琴:http://jsfiddle.net/uetpjpa9

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-25 22:46:01

根本的问题是Selectize有鼠标下移和模糊处理程序,这些处理程序在mouseup事件之前删除下拉列表,这将完成链接等待的单击。如果没有选择器的直接支持,要避免这种情况并不容易,但是由于它的插件系统和它为您提供的选择内部设备的访问量,这是可能的。

下面是一个插件,它允许单击类clickable的下拉元素。(演示)

代码语言:javascript
复制
Selectize.define('option_click', function(options) {
    var self = this;
    var setup = self.setup;
    this.setup = function() {
        setup.apply(self, arguments);

        var clicking = false;

        // Detect click on a .clickable
        self.$dropdown_content.on('mousedown click', function(e) {
            if ($(e.target).hasClass('clickable')) {
                if (e.type === 'mousedown') {
                    clicking = true;
                    self.isFocused = false; // awful hack to defuse the document mousedown listener
                } else {
                    self.isFocused = true;
                    setTimeout(function() {
                        clicking = false; // wait until blur has been preempted
                    });
                }
            } else { // cleanup in case user right-clicked or dragged off the element
                clicking = false;
                self.isFocused = true;
            }
        });

        // Intercept default handlers
        self.$dropdown.off('mousedown click', '[data-selectable]').on('mousedown click', '[data-selectable]', function() {
            if (!clicking) {
                return self.onOptionSelect.apply(self, arguments);
            }
        });
        self.$control_input.off('blur').on('blur', function() {
            if (!clicking) {
                return self.onBlur.apply(self, arguments);
            }
        });
    }
});

要使用它,您需要将插件选项传递给选择调用(.selectize({plugins:['option_click']})),并将clickable类添加到下拉模板中的链接中。(这是相当具体的。如果有嵌套元素,请确保clickable位于将首先看到mousedown事件的元素上。)

请注意,这是一种相当麻烦的方法,它可能有边缘情况,并且在任何时候都可能中断,如果选择分派事件的方式发生了变化。如果选择本身会使这个异常变得更好,但在项目赶上它的待办事项并变得更容易接受请求和PRs之前,这可能是最实际的方法。

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

https://stackoverflow.com/questions/33206677

复制
相关文章

相似问题

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