代码之家  ›  专栏  ›  技术社区  ›  Nick Higgs

IE中的Script.aculo.us自动完成程序问题

  •  6
  • Nick Higgs  · 技术社区  · 16 年前

    我已经验证了建议数据是否正确地从服务器返回;这个问题似乎与suggestions元素的定位有关,因为页面上其他相对定位的元素在您期望suggestions出现的那一刻会移出位置。

    有没有人听说过这样的问题,或者对如何解决有什么建议?

    编辑:为了响应Chris,我将partialChars参数设置为1,并且该控件在我尝试过的所有其他浏览器中都能工作,这些浏览器是Firefox、Safari、Opera和Chrome的最新版本。我本来应该说清楚的。谢谢。

    6 回复  |  直到 13 年前
        1
  •  5
  •   Robin Robin    16 年前

    我确实有同样的问题。这个问题只出现在IE中(同样在8.0测试版中)

    我试过的Firefox和Chrome都没有问题。

    据其他人说,这是由于HTML文件中的DOCTYPE声明造成的。点击此处: http://prototype.lighthouseapp.com/projects/8887/tickets/32-ajax-autocomplete-in-ie-with-doctype

    这个bug在ruby开发板上也有一张罚单: http://dev.rubyonrails.org/ticket/11051

    这两个环节都有解决问题的办法。

        2
  •  3
  •   Giacomo1968    15 年前

    非常感谢你的帮助。我自己也用过,但是修改了它,所以只有在使用Ajax.Autocompleter执行以下操作时才调用它。

    function positionAuto(element, entry) {
        setTimeout( function() {
          Element.clonePosition('choices_div', 'text_element', {
          'setWidth': false,
          'setHeight': false,
          'offsetTop': $('text_element').offsetHeight
        } );
      }, 300);
      return entry;
    }
    
    new Ajax.Autocompleter('text_element', 'choices_div', [url to web service], {
      paramName: 'fulltext',
      minChars: 2,
      callback: positionAuto, // See above
      [etc...]
    

    在IE 8上测试;而且效果很好。同时也适用于其他真正的浏览器。希望这能省去一些程序员在处理这个问题时的麻烦。

        3
  •  2
  •   Chris Dolan    16 年前

    //-partialChars-触发前要输入多少个字符
    //部分匹配(与minChars不同,minChars定义
    //匹配需要多少个字符

        4
  •  2
  •   Martijn Pieters    12 年前

    在IE8/IE9中与这个问题进行了多次斗争之后,我最终使用了CSS黑客。这里的方法是在绝对定位的容器内强制相对位置。额外的容器是必要的,以便在其他元素上浮动选择。

    div.acwrap {
      position: absolute;
      height: 40px;
    }
    
    div.autocomplete {
      position: relative !important;
      top: -5px  !important;
      left: 0px !important;
      width:250px;
      margin:0;
      padding:0;
    }
    

    在我的HTML代码中,我使用了如下类:

    <div class="acwrap">
     <div id="autocomplete_choices" class="autocomplete">
     </div>
    </div>
    

    这个想法起源于: Scriptaculous / Prototype IE 8 Autocomplete disappearing problem .

        5
  •  1
  •   Nick Higgs    16 年前

    new Ajax.Autocompleter(textInputId, suggestionsHolderId, suggestionsUrl, params);
    
    //Hack
    Event.observe(window, 'load', function()
    {
        try
        {
            Position.clone($(textInputId), $(suggestionsHolderId),
                { setHeight: false, offsetTop: $(textInputId).offsetHeight});
        }
        catch(e){}
    });
    
        6
  •  1
  •   Pablo Fernandez    14 年前

    这是一个已知的bug,它有一个可以运行的补丁,但是还没有包括在内。您可以在此处阅读更多信息: https://prototype.lighthouseapp.com/projects/8886-prototype/tickets/618-getoffsetparent-returns-body-for-new-hidden-elements-in-ie8-final#ticket-618-9