Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript不在IE中工作_Javascript - Fatal编程技术网

Javascript不在IE中工作

Javascript不在IE中工作,javascript,Javascript,我在IE中的自动搜索javascript有问题。它在Firefox中正常工作。要了解我在说什么,请访问: 然后开始在搜索栏中输入单词cart。你会在Firefox中看到它,但在IE中没有。任何帮助都将不胜感激 代码如下: <script type="text/javascript"> function findPos(obj) { var curleft = curtop = 0; if (obj.offsetParent) { do {

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

然后开始在搜索栏中输入单词cart。你会在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>

功能findPos(obj){
var curleft=curtop=0;
if(对象抵销父对象){
做{
curleft+=obj.offsetLeft;
curtop+=对象偏移量;
}而(对象=对象抵销母公司);
}
返回curleft.toString()+“”+curtop.toString();
}
(功能(){
var nxt_host=((“https:==document.location.protocol)?“https://:“http://”);
nxt_主机+=“vector.nextopiasoftware.com/”;
document.write(unescape(“%3C”)+“scriptsrc=””+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”);
})();
(功能(){
var jnxtac=jQuery.noConflict(true);
jnxtac(“#myInput”).css('z-index','20000');
jnxtac(“#myInput”).autocomplete({
cid:'80c356394c27c27aacf41c465e455f7d'
});
})();
if(navigator.appVersion.indexOf(“MSIE”)!=-1){
var offset=findPos(document.getElementById('search')).split('');
var acStyleEl=document.createElement('style');
var acStyleCss='.ui自动完成{位置:绝对!重要;左:'+(parseInt(偏移量[0])+200)+'px!重要;顶:'+(parseInt(偏移量[1])+24)+'px!重要;}';
var bodyEl=document.getElementsByTagName('body')[0];
setAttribute(“类型”、“文本/css”);
setAttribute(“id”、“accselement”);
bodyEl.appendChild(acStyleEl);
acStyleEl.styleSheet.cssText=acStyleCss;
}​

任何帮助都将不胜感激

正如其他评论所说,这不是很好的代码,可以重新编写,以便更好地工作,更加清晰。 不过,我认为您所问的具体问题是,它在IE中不起作用是因为有一个if语句读取browser agent(navigator)字符串,如果它包含“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语句,你应该会没事。

我不认为这是css和javascript的问题,在IE中,由于样式混乱,combox div向右移动,您的脚本被破坏

d=c.width("").width()
这是正在破坏的代码


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

“我不确定此代码是javascript还是jquery”:嗯,该代码看起来一团糟。老实说,我不想费心去解决这个问题,最好从零开始做你想做的事情。哪种版本?另外,试着调试代码,找出实际的问题所在。这就是我被告知要放在那里的。我不是一个javascript的家伙,所以我不知道如何重写或调试它。我指的是最新的IE。我想所有版本的IE可能都是一样的。谢谢你的帮助!我删除了if语句,但这似乎没有改变任何事情。我还删除了整个if语句块,它仍然在firefox中正确对齐。这是否意味着有另一个脚本正在执行此操作?谢谢您的帮助!你能告诉我你在哪里看到这个代码吗?我也不知道如何使用firebug调试任何东西。谢谢!我找到了那段代码并删除了它。它现在工作得很好:)你们是如何确定它在哪里被破坏的?在IE开发者工具中,它抛出了错误,看起来代码试图设置某个容器的宽度。