javascript - 单击时没有任何反应 - jQuery

标签 javascript jquery click

我有这个代码:

    jQuery.fn.extend({
    SelectBox: function(options) {
        return this.each(function() {
            new jQuery.SelectBox(this, options);
        });
    }
});

jQuery.SelectBox = function(selectobj, options) {

    var opt = options || {};
    opt.inputClass = opt.inputClass || "inputClass";
    opt.containerClass = opt.containerClass || "containerClass";

    var inFocus = false;

    var $select = $(selectobj);
    var $container = setupContainer(opt);
    var $input = setupInput(opt);

    $select.hide();
    hideMe();

    $input
    .click(function(){
        if (!inFocus) {
            showMe();
        } else {
            hideMe();
        }
    })
    .keydown(function(event) {     
        switch(event.keyCode) {
            case 27:
              hideMe();
            break;
        }
    })
    .blur(function() {
        if ($container.not(':visible')) {
            hideMe();
        }
    });

    function showMe() { 
        $container.show();
        inFocus = true;
    }

    function hideMe() { 
        $container.hide();
        inFocus = false;
    }

    function setupContainer(options){
        $container = $("." + options.containerClass);
        $input = $("." + options.inputClass);

        var first = false;
        var li = "";

        $select.find('option').each(function(){
            if($(this).is(':selected')){
                $input.find('span').text($(this).text());
                first = true;
            }
            //var $li = $container.find('ul').append('<li>' + $(this).text() + '</li>');
            var li = document.createElement('li');
            li.innerHTML = $(this).text();
            $container.find('ul').append(li);
            $(li).click(function(event){
                $(li).remove();
            });
        });

        return $container;
    }

    function setupInput(options){
        $input = $("." + options.inputClass);
        $input.attr('tabindex', '0');
        return $input;
    }

};

在此代码中,“选择”我选择隐藏,并替换为列表。 现在,我想点击一些“li”,然后删除“li”。

但是,我点击了我创建的“li”,却什么也没发生。 为什么?当我点击“li”时,如何删除或执行其他操作?

最佳答案

无需向每个单独的元素添加事件。使用事件委托(delegate)。

$(document).ready(function() {
    $(commonParentSelector).on('click', 'li', function() {
    // ^^^^^^^^^^^^^^^^^^^^
        $(this).remove();
    });
});

根据您的需要更新commonParentSelector,它应该可以工作。

文档:https://api.jquery.com/on

关于javascript - 单击时没有任何反应 - jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30102913/

相关文章:

jquery - iPad 触摸端上的点击事件被调用两次

javascript - AngularJs ng-repeat 是在复选框上注册两个点击事件吗?

javascript - 无法执行 'getImageData' - Canvas 已被跨源数据污染

jquery - Rails 3 和 jQuery - 两者如何一起创建 Web 应用程序?

javascript - 在 Meteor 中重新初始化代码

javascript - 是否可以使用 jqplot 制作此图?

javascript - 单击按钮时添加值

javascript - 达到目标时更改倒数计时器的外观?

javascript - 大数数组压缩

javascript - ExtJS 4 中函数处理程序内的作用域