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

时间:2020-03-06 14:29:17  来源:igfitidea点击:

我正在IE中的Script.aculo.us自动完成程序控件遇到问题(我已经在IE6和7中尝试过)。加载页面后,第一个字符输入到文本框中时,建议无法显示。在最初的故障之后,控件将按预期方式工作。

我已经验证了建议数据是从服务器正确返回的;该问题似乎与建议元素的位置有关,因为在我们希望显示建议时,页面上其他相对定位的元素会错位。

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

编辑:作为对Chris的回应,我已将partialChars参数设置为1,并且该控件在我尝试过的所有其他浏览器中都有效,这些浏览器是Firefox,Safari,Opera和Chrome的最新版本。我可能应该首先明确这一点。谢谢。

解决方案

问题只是在IE中还是在所有浏览器中?实际上,忽略第一个字符是自动完成程序的默认设置。在controls.js中,有一个名为Autocompleter.Local的类,该类具有一个名为partialChars的字段,默认为2. 该字段的文档说:

// partialChars触发前要输入多少个字符
//部分匹配(不同于minChars,后者定义了
//进行匹配需要多少个字符
//)。默认为2.

我仍然不知道到底是什么引起了这个问题,但是我设法找到了解决办法。这个想法是执行通常在页面加载时导致第一个字符输入失败的处理,以使其摆脱干扰:

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){}
});

我确实有完全相同的问题。该问题仅出现在IE中(也在8.0 beta中)

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

根据其他人的说法,这是由于HTML文件中的DOCTYPE声明所致。在这里检查:http://prototype.lighthouseapp.com/projects/8887/tickets/32-ajax-autocomplete-in-ie-with-doctype

该错误还在ruby开发板上得到了票证:http://dev.rubyonrails.org/ticket/11051

这两个链接都有解决此问题的解决方案。

希望该错误将在下一个版本的prototype / scriptaculous中修复:)

非常感谢入侵。我自己使用了它,但是对其进行了修改,因此仅在通过以下操作使用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...]

由于回调是在发出实际请求之前调用的,因此在那一刻放置DIV最有意义。并且将确保即使调整窗口大小或者滚动窗口,DIV的位置也正确。令人发疯的是,为了使其始终如一地工作,我不得不将其包装在" setTimeout()"中。我没有尝试过多地使用不同的计时设置,但是如果可以使用的超时阈值较低,我想知道。

在IE 8和7上进行了测试,效果很好。并与其他真正的浏览器一起使用。希望这可以减轻一些编码人员在处理此问题时的头痛。

这是一个已知的Bug,该bug可以正常运行,但尚未包括在内。我们可以在此处了解更多信息:https://prototype.lighthouseapp.com/projects/8886-prototype/tickets/618-getoffsetparent-returns-body-for-new-hidden-elements-in-ie8-final#ticket- 618-9