自定义选择下拉,无法选择用户添加的项目

Custom select dropdown, unable to select user added item

本文关键字:选择 用户 添加 项目 自定义      更新时间:2023-09-26

所以我有这个自定义下拉选择,我正在构建。它有一些嵌套的项目在那里,作为第一个选项,用户可以创建自己的项目。我已经让它工作了,所以他们可以点击它,在那里输入,一旦他们按下回车键,它就会被选中。我不明白的是,在他们创建了一个项目之后,他们选择了其他项目,他们无法返回选择新创建的项目。希望这讲得通。这里是jsfiddle https://jsfiddle.net/johnsonjpj/18zm9kwz/2/

这是脚本的一部分,我使用它将添加按钮更改为输入,然后将该数据替换回列表。

$(document).ready(function() {

    $('body').on('click', '.addBtn', function(){
      var $el = $(this).parent('.newInner');
      var $input = $('<input type="text" class="form-control">');
        $input.attr('placeholder', 'Enter your category name and press "Enter"');
//    <span class="btn btn-default btn-xs"><i class="fa fa-check" aria-hidden="true"></i></span>
      $el.replaceWith( $input );
      var save = function(){
        var $p = $('<span class="catName" />').text( $input.val() );
        $input.replaceWith( $p );
        $('.category-active').removeClass('category-active');
        $('.addNew').removeClass('addNew').addClass('list-group-item category-active');
        $('#categoryPlaceholder').attr('value', $input.val());

        var container = $(".list-group.list-group-root");
        container.hide();
        $('.category-select').removeClass('category-open');
      };
      $input.one('blur', save).focus();
        $input.keypress(function (e) {
             var key = e.which;
             if(key == 13)  // the enter key code
              {
                save();
              }
        });   
    });
});
非常感谢所有的帮助。谢谢!

您需要使用事件委托,以便将事件绑定到动态添加的元素

你需要修改

$('.catName').on('click', function() {

$('body').on('click','.catName', function() {

工作小提琴:https://jsfiddle.net/x2m54gjj/

当文档第一次加载时,将函数$('.catName').on('click', function() {...}添加到所有类别。这是处理选择的函数没有它你就不能点击任何项,对吧?

您使用on('click'...)的方式是所谓的直接绑定,并且仅适用于当前对象。

所以这个函数应用于当时所有存在的项目。因此,当用户向列表中添加新项目时,该新项目将缺少此功能,因此无法被选中。

要解决这个问题,你需要添加一个委托绑定,你可以通过修改

$('.catName').on('click', function() {

$('body').on('click','.catName', function() {