2010-12-07 2 views
1

По какой-то причине кнопка combobox не отображается в IE или Chrome, поэтому я получаю только текстовое поле. кто-нибудь понял, как решить?jquery Ui Combobox Ошибка в Chrome/IE 7

Использование последней версии jquery/jqueryui/combobox.

Heres мой отредактированный вариант ui.combobox (специально сог оригинальная версия оленья кожа дать идентификатор для нового элемента), а также Theres исправление размера: поле со списком

(function($) { 
     $.widget("ui.combobox", { 
      _create: function() { 
       var self = this, 
        id = this.element.attr("id"), 
        select = this.element, 
        theWidth = select.width(), 
        selected = select.children(":selected"), 
        value = selected.val() ? selected.text() : ""; 
        select.hide(); 
        //fix, doesnt let the element beign too short. 
        if(theWidth < 110) { 
         theWidth = 110; 
        } 
       var input = $('<input id="' + id + '-combo" style="width: ' + theWidth + 'px;">') 
        //.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 { 
             id: this.value, 
             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 
          }); 
         }, 
         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(""); 
            return false; 
           } 
          } 
         } 
        }) 
        .addClass("ui-widget ui-widget-content ui-corner-left"); 
        var span = $('<span style="white-space: nowrap;"></span>') 
        .append(input).insertAfter(select); 
       input.data("autocomplete")._renderItem = function(ul, item) { 
        return $("<li></li>") 
         .data("item.autocomplete", item) 
         .append("<a>" + item.label + "</a>") 
         .appendTo(ul); 
       }; 

       $("<button id='" + id + '-combo-button' + ">&nbsp;</button>") 
        .attr("tabIndex", -1) 
        .attr("title", "Mostrar Todos os itens") 
        .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; 
         } 

         // pass empty string as value to search for, displaying all results 
         input.autocomplete("search", ""); 
         input.focus(); 
        }); 
      } 
     }); 
    })(jQuery); 
+0

Не могли бы вы предоставить JavaScript, который вы используете для создания combobox? – 2010-12-07 16:25:29

ответ

0

Херес исправить мой друг указал. Эта версия ui.combobox получила автоматическую ширину и несколько исправлений, которые я нашел @ web. работает и т. д.

(function($) { 
    $.widget("ui.combobox", { 
     _create: function() { 
      var self = this, 
       id = this.element.attr("id"), 
       select = this.element, 
       theWidth = select.width(), 
       selected = select.children(":selected"), 
       value = selected.val() ? selected.text() : ""; 
       select.hide(); 
       //fix, doesnt let the element beign too short. 
       if(theWidth < 110) { 
        theWidth = 110; 
       } 
      var input = $('<input id="' + id + '-combo" style="width: ' + theWidth + 'px;">') 
       //.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 { 
            id: this.value, 
            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 
         }); 
        }, 
        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(""); 
           return false; 
          } 
         } 
        } 
       }) 
       .addClass("ui-widget ui-widget-content ui-corner-left"); 
       var span = $('<span style="white-space: nowrap;"></span>') 
       .append(input).insertAfter(select); 
      input.data("autocomplete")._renderItem = function(ul, item) { 
       return $("<li></li>") 
        .data("item.autocomplete", item) 
        .append("<a>" + item.label + "</a>") 
        .appendTo(ul); 
      }; 

      $("<button id='" + id + "-combo-button'>&nbsp;</button>") 
       .attr("tabIndex", -1) 
       .attr("title", "Mostrar Todos os itens") 
       .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; 
        } 

        // pass empty string as value to search for, displaying all results 
        input.autocomplete("search", ""); 
        input.focus(); 
       }); 
     } 
    }); 
})(jQuery); 
Смежные вопросы