jQuery自动完成组合框不会销毁

曼尼·斯兰(Manny Sran)

http://jsfiddle.net/BbWza/1193/

           $.widget("ui.combobox", {
            _create: function () {
                var self = this;
                var select = this.element.hide(),
                  selected = select.children(":selected"),
                  value = selected.val() ? selected.text() : "";
                var input = $("<input />")
                  .insertAfter(select)
                  .val(value)
                  .autocomplete({
                      delay: 0,
                      minLength: 0,
                      source: function (request, response) {
                          var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
                          response(select.children("option").map(function () {
                              var text = $(this).text();
                              if (this.value && (!request.term || matcher.test(text)))
                                  return {
                                      label: text.replace(
                                        new RegExp(
                                          "(?![^&;]+;)(?!<[^<>]*)(" +
                                          $.ui.autocomplete.escapeRegex(request.term) +
                                          ")(?![^<>]*>)(?![^&;]+;)", "gi"),
                                        "<strong>$1</strong>"),
                                      value: text,
                                      option: this
                                  };
                          }));
                      },
                      select: function (event, ui) {
                          ui.item.option.selected = true;
                          self._trigger("selected", event, {
                              item: ui.item.option
                          });

                          var event;
                          if (document.createEvent) {
                              event = document.createEvent("HTMLEvents");
                              event.initEvent("combochange", true, true);
                          } else {
                              event = document.createEventObject();
                              event.eventType = "combochange";
                          }
                          event.eventName = "combochange";

                          if (document.createEvent) {
                              self.element[0].dispatchEvent(event);
                          } else {
                              self.element[0].fireEvent("on" + event.eventType, event);
                          }

                      },
                      change: function (event, ui) {

                          if (!ui.item) {
                              var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i"),
                              valid = false;
                              select.children("option").each(function () {
                                  if (this.value.match(matcher)) {
                                      this.selected = valid = true;
                                      return false;
                                  }
                              });
                              if (!valid) {
                                  // remove invalid value, as it didn't match anything
                                  $(this).val("");
                                  select.val("");
                                  input.data("autocomplete").term = "";
                                  return false;
                              }
                          }
                      },

                  })
                  .addClass("ui-widget ui-widget-content ui-corner-left");

                input.data("autocomplete")._renderItem = function (ul, item) {
                    return $("<li></li>")
                      .data("item.autocomplete", item)
                      .append("<a>" + item.label + "</a>")
                      .appendTo(ul);
                };

                $("<span> </span>").attr("tabIndex", -1).attr("title", "Show All Items").insertAfter(input).button({
                    icons: {
                        primary: "ui-icon-triangle-1-s"
                    },
                    text: false
                }).removeClass("ui-corner-all").addClass("ui-corner-right ui-button-icon").click(function () {
                    // close if already visible
                    if (input.autocomplete("widget").is(":visible")) {
                        input.autocomplete("close");
                        return;
                    }

                    $(this).blur();
                    // pass empty string as value to search for, displaying all results
                    input.autocomplete("search", "");
                    input.focus();
                });
            },
            destroy: function () {
                this.input.remove();
                this.button.remove();
                this.element.show();
                $.Widget.prototype.destroy.call(this);
            }

        });

$('#combobox').combobox();


$('#clicky').click(function() {
        $('#combobox').combobox('destroy');


});

如您所见,当您单击“销毁组合”按钮时,它不会销毁,我在做错什么吗?我确定您只需要将其命名为$('#combobox')。combobox('destroy'); 我不确定是否有什么原因阻止了通话的进行。任何帮助将不胜感激!

曲折的

您处在正确的路径上,只是没有正确调用特定的对象。

工作示例:http : //jsfiddle.net/Twisty/BbWza/1195/

destroy: function() {
  console.log("Bye bye.");
  this.element.next("input[role='textbox']").remove();
  this.element.next("span[role='button']").remove();
  this.element.show();
  $.Widget.prototype.destroy.call(this);
}

当您调用destroy时,this.element是原始select元素。因此,我们期待创建的下一个项目,然后将其删除。

希望能有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

重叠的jQuery自动完成组合框

自定义jQuery自动完成组合框CSS

JavaFX中的自动完成组合框

占位符在页面加载(IE10)时打开jQuery UI自动完成组合框

自定义 jquery-ui 自动完成组合框的一些麻烦

自动完成组合框小部件强制更改

自动完成组合框按钮显示不正确

jQuery自动完成组件

如何使用数据库(TornadoFX)中的信息更新自动完成组合框建议列表?

如何在PyQt4中创建自动完成组合框?

为什么动态值未填充在自动完成组合框中?

带有LIKE搜索的Python Tkinter自动完成组合框?

如何在Web浏览器中自动完成组合框?

JQueryUi 自动完成组合框有时无法在 Firefox 中正确加载

带有 SQL Server 数据库的自动完成组合框

jQuery自动完成组合框在新创建的列表上添加标题属性

jQuery UI自动完成组合框选择值而不是名称

JavaFX自动完成组合框下拉大小

在自动完成组合框中选择下一个项目时遇到问题

将项目添加到Java中的jlist之后,从自动完成组合框中删除该项目

完成组合框 VBA 时出现不匹配错误

jQuery自动完成-传递选定的组合框值

在另一个组合框中插入数字时自动生成组合框

如何创建自动完成的组合框?

组合框rcp中的自动完成

Datagrid组合框消失的内容+自动完成

测试包装的 vuetify 自动完成组件 v 菜单不会在 html 中打开

限制自动完成组件的结果数量?

jQuery Tag-它不会自动完成