IE中的jQuery / AJAX:Object不支持此属性或方法

时间:2009-11-09 15:31:22

标签: jquery ajax internet-explorer

好的,我很难过。基本上,这个脚本在FF中工作正常,但在IE(6,7或8)中没有 - 它返回“对象不支持此属性或方法”错误。有什么想法吗?:

function portfolioAjaxLoader(page){
$("div#portfolio_container").load("include/DCK_portfolio_gallery.inc.php?cat=" + page);
}

$(document).ready(function(){

  $('a.portfolio_subnav').livequery('click',function(){
    portfolioAjaxLoader(this.title);
    return false;
    });

//modify page DOM if Javascript is switched on
$('div#gallery_frame').livequery(function(){
    //assign portfolioAjaxLoader to sub navigation links

    gallery_frame = $('div#gallery_frame');
    //set gallery_strip width to the number of entries multiplied by width of gallery entry element
    gallery_strip = $('div#gallery_strip');
    gallery_entries = $('div#gallery_strip a');
    elementWidth = 235;
    gallery_strip_width = elementWidth*gallery_entries.length+'px';
    gallery_strip.css({'width':gallery_strip_width});

    //add portfolio navigation buttons
    if(gallery_entries.length>4){
        $('div#portfolio_nav').before('<p id="portfolio_nav_prev"></p><p id="portfolio_nav_next"></p>');
        }

    //assign event triggers to inserted portfolio nav elements
    prev = $("p#portfolio_nav_prev");
    next = $("p#portfolio_nav_next");

    scrollPrevMax = (((gallery_entries.length - 4) * elementWidth)+20);//tolerance
    scrollMax = ((gallery_entries.length - 5) * elementWidth);
    scrollMin = ((gallery_entries.length - 6) * elementWidth);
    });


    function nextAnim(){
        //remove handler
        next.unbind();

        var currentScrollPos = gallery_frame.scrollLeft();
        var targetPos = currentScrollPos + elementWidth;

        if(currentScrollPos > scrollMin){
           next.fadeOut("fast");
           }

        if(currentScrollPos >= 0){
           prev.fadeIn("fast");
           }


        gallery_frame.animate({scrollLeft:targetPos}, 300, 'easeInOutQuart',function(){next.bind('click',nextAnim)});
        return false;
        }


    function prevAnim(){
        //remove handler
        prev.unbind();

        var currentScrollPos = gallery_frame.scrollLeft();
        var targetPos = currentScrollPos - elementWidth;

        if(currentScrollPos < scrollPrevMax){
            next.fadeIn("fast");
            }

        if((currentScrollPos == 0)||(currentScrollPos < elementWidth*2)){
            prev.fadeOut("fast");
            }

        gallery_frame.animate({scrollLeft:targetPos}, 300, 'easeInOutQuart',function(){prev.bind('click',prevAnim)});
        //prev.bind('click',prevAnim);
        return false;
        }

    next.click(nextAnim);
    prev.click(prevAnim);

});

我故意在全局范围内留下一些元素(在声明中省略var)。

仅供记录,它在此处报告错误:

gallery_frame = $('div#gallery_frame');

第9号角色,第16行。

5 个答案:

答案 0 :(得分:2)

好吧,我似乎已经破解了它。首先 - 我需要初始化开放文档中的变量。现在功能即

var gallery_frame,gallery_strip,gallery_entries,elementWidth,gallery_strip_width, prev, next, scrollPrevMax,scrollMax,scrollMin;

然后,我不得不在检测图库框架的livequery函数中移动事件处理程序赋值。

感谢帮助人员。

答案 1 :(得分:0)

如果您还不知道导致问题的是哪一行,您将需要使用调试器逐步执行它。如果您无法及时连接调试器,请将其放在正确的位置。

debugger;

然后,检查哪个语句触发了这个。最有可能的是,您使用的是特定于浏览器的方法或属性。你会想要避免这些。如果JQuery提供了自己的属性或方法版本,那么使用JQuery的版本。

答案 2 :(得分:0)

当您在HTML中包含脚本时,您设置了什么类型的arttribute?我遇到了type="application/javascript"设置为type="text/javascript"的情况。如果您是Dreamweaver用户,则首先列出application / javascript,这是“正确”选择...除了IE浏览器(至少6/7,可能是8)不理解此设置。你必须使用text / javascript。

当我听到快乐的FF脚本和缺少IE脚本时,这就是我首先想到的。我曾经这样受过一次创伤。 :)

答案 3 :(得分:0)

由于它在IE8上失败,我建议你使用Web Developer Toolkit,对我来说我按F12,然后你可以开始调试,它将重新加载你的页面,你应该看到错误所在的行。 / p>

答案 4 :(得分:0)

如果您确定包含了正确的jQuery脚本文件并仍然出现此错误,请检查其他js文件是否存在冲突或覆盖方法