jQuery .closest()在一个页面上工作,但不在另一个页面上工作

时间:2011-05-24 04:00:22

标签: jquery

http://www.gamingunion.net/ http://www.gamingunion.net/forums/

当您点击游戏背景时,它将打开Amazon.com链接。由于某些原因,在论坛上它失败并且错误 $(event.target).closest不是函数

http://www.bungieunion.com/gamingunion/js/forum.js

第二个功能是有问题的功能。 jQuery版本在两个页面上是相同的,所以我无法弄清楚问题可能是什么。

2 个答案:

答案 0 :(得分:1)

看起来目标是HTML DOM对象,而不是jquery对象。我会测试以查看event.target是否是jQuery的实例:

var target = (event.target instanceof jQuery) ? event.target : jQuery(event.target);

这将确保在调用.closest()

之前目标对象是jQuery对象

编辑:在使用noConflict的情况下将$更改为jQuery

编辑#2:我将你的第二个方法改为:

var _body = jQuery("body");

_body.click(function() {
    // affilate takeover functions
    if( _body.attr('id').length 
        && _body.closest('header').length == 0 
        && _body.closest('#wrapper > nav').length == 0 
        && _body.closest('#leaderboard > div').length == 0 
        && _body.closest('#wrapper2').length == 0 
        && _body.closest('body > footer').length == 0 
        && _body.attr('name') != 'userfile' 
        && _body.closest('.ui-datepicker-calendar').length == 0 
        && _body.closest('.ui-datepicker-prev').length == 0 
        && _body.closest('.ui-datepicker-next').length == 0 
        && _body.closest('.editor_control_bar').length == 0 
        && _body.closest('.ui-autocomplete').length == 0 
        && _body.closest('#fancybox-overlay').length == 0 
        && _body.closest('#fancybox-wrap').length == 0 
        && _body.attr('href') != '#shoutbox' 
        && !_body.hasClass('ui-button-text') 
        && _body.closest('.ui-dialog').length == 0) {
        // variables
        var affiliate_url = jQuery("input[name=affiliate_url]").val();

        window.open(affiliate_url);
    }
});

答案 1 :(得分:0)

我认为亚马逊联盟脚本在加载脚本后加载jQuery版本1.2.6,并在您调用jQuery.noConflict()之后加载。如果您在IE9的监视面板中查看$jQuery,您会发现它们不一样。加载的脚本是

http://z-ecx.images-amazon.com/images/G/01/browser-scripts/us-site-wide-1.2.6/site-wide-10148190434.js._V178546632_.js

是jQuery的1.2.6版。请注意,版本1.3中引入了.closest