0

我在 IE 中遇到自动搜索 javascript 的问题。它在 Firefox 中正常工作。要了解我在说什么,请访问:

然后开始在搜索栏中输入单词购物车。您会在 Firefox 中看到它在下方排列,但在 IE 中却没有。任何帮助将不胜感激!

这是代码:

<script type="text/javascript">
function findPos(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
    }
    return curleft.toString() + ' ' + curtop.toString();
}

(function() {
    var nxt_host = (("https:" == document.location.protocol) ? "https://" : "http://");
    nxt_host += "vector.nextopiasoftware.com/";
    document.write(unescape("%3C") + "script src='" + nxt_host + "nxt-ac-js-1.3-min.js' type='text/javascript'" + unescape("%3E%3C/script%3E"));
    document.write(unescape("%3C") + "link rel='stylesheet' type='text/css' href='" + nxt_host + "ac-1.3.css'" + unescape("%3E"));
})();
</script>

<script type="text/javascript">
(function() {
    var jnxtac = jQuery.noConflict(true);
    jnxtac("#myInput").css('z-index', '20000');
    jnxtac("#myInput").autocomplete({
        cid: '80c356394c27c27aacf41c465e455f7d'
    });
})();

if (navigator.appVersion.indexOf("MSIE") != -1) {
    var offsets = findPos(document.getElementById('search')).split(' ');
    var acStyleEl = document.createElement('style');
    var acStyleCss = '.ui-autocomplete {position:absolute !important;left: ' + (parseInt(offsets[0]) + 200) + 'px !important; top: ' + (parseInt(offsets[1]) + 24) + 'px !important;}';
    var bodyEl = document.getElementsByTagName('body')[0];
    acStyleEl.setAttribute("type", "text/css");
    acStyleEl.setAttribute("id", "acCssElement");
    bodyEl.appendChild(acStyleEl);
    acStyleEl.styleSheet.cssText = acStyleCss;
}​
</script>

任何帮助将不胜感激!

4

2 回答 2

0

正如其他评论所说,这不是很好的代码,可以重写以更好地工作并且更清晰。但是,这就是说我认为您所问的具体问题,它在 IE 中不起作用是因为有一个 if 语句读取浏览器代理(导航器)字符串,如果它包含“MSIE”,它不会显示您的菜单。

if (navigator.appVersion.indexOf("MSIE") != -1) {

此行获取浏览器代理字符串,如果不包含“MSIE”(navigator.appVersion.indexOf() 将返回字符串开头的索引,如果未找到该字符串,则返回“-1”)然后执行剩余的函数中的代码:

if (navigator.appVersion.indexOf("MSIE") != -1) {
  var offsets  = findPos(document.getElementById('search')).split(' ');
  var acStyleEl = document.createElement('style');
  var acStyleCss = '.ui-autocomplete {position:absolute !important;left: ' + (parseInt(offsets[0]) +200) + 'px !important; top: ' + (parseInt(offsets[1]) + 24) + 'px !important;}';
  var bodyEl = document.getElementsByTagName('body')[0];
  acStyleEl.setAttribute("type", "text/css");
  acStyleEl.setAttribute("id", "acCssElement");
  bodyEl.appendChild(acStyleEl);
  acStyleEl.styleSheet.cssText = acStyleCss;
}

代码很复杂,虽然我不确定 if 语句中的代码是做什么的,但它在 IE 中不会这样做,这听起来像你的问题......删除 if 语句,你应该没问题。

于 2012-12-28T04:34:25.610 回答
0

我不认为这是 css 和 javascript 的问题,在 IE 中,您的脚本正在中断,因此样式混乱并且组合框 div 向右移动。

d=c.width("").width()

这是正在破坏的代码。

您是否调试过您的应用程序或更改了此内容。

于 2012-12-28T05:10:54.290 回答