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

これは css と javascript の問題ではないと思います。IE では、スタイリングが台無しになり、コンボックス div が右にシフトするためにスクリプトが壊れています。

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

これは壊れているコードです。

アプリケーションをデバッグしたり、このことを変更したりしましたか?

于 2012-12-28T05:10:54.290 に答える
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 に答える