在Firefox中未定义的event.target和IE中的次要错误

时间:2013-10-03 15:52:58

标签: javascript jquery firefox

我已经阅读了有关事件问题的Firefox上15个不同的堆栈溢出问题。他们并没有密切关注我的功能,但我认为这是一个直截了当的问题。我已经尝试了一切似乎对他们的问题有用的东西,但都失败了。

我的问题是在Firefox中,没有任何反应,这是由我的代码订单引起的。订单非常重要,否则我会导致不必要的多个按钮附加。我至少理解为什么它不是基于点击功能添加和删除类。我不明白的是,我添加了var event = event || window.event;并尝试了if(!event) event = window.event;。他们似乎什么都不做,所以我甚至尝试将window.event放在我刚刚举办过活动的任何地方,这也没有用。

我在IE中的问题,这个至少允许我点击并展开文章,这篇文章很棒,但是一旦点击它就不会附加我的按钮。这个并不重要,因为关闭文章按钮不是生死攸关的。

我的jQuery

function newsArticle() { // Articles Functionality
    $('.article').on('click', function() {
        var self = this;
        var button = $('<span />', {
            'class': 'close',
            text: 'Click to minimize article',
            on: {
                click: function (e) {
                    e.stopPropagation();
                    $(self).stop(true).toggleClass('fullArticle article');
                    $(this).remove();
                }
            }
        });
    if(!event) event = window.event;
    if($(event.target).is('.article')) {
        $(this).append(button);
    }
    else if($(event.target).parents().is('.article')) {
        $(this).append(button);
    }

    $(this).removeClass('article').addClass('fullArticle');
    });
}

newsArticle();

答案

function newsArticle() { // Articles Functionality
    $('.article').on('click', function(e) {
        var self = this;
        var button = $('<span />', {
            'class': 'close',
            text: 'Click to minimize article',
            on: {
                click: function (e) {
                    e.stopPropagation();
                    $(self).stop(true).toggleClass('fullArticle article');
                    $(this).remove();
                }
            }
        });
    if($(e.target).is('.article')) {
        $(this).append(button);
    }
    else if($(e.target).parents().is('.article')) {
        $(this).append(button);
    }

    $(this).removeClass('article').addClass('fullArticle');
    });
}

newsArticle();

jsfiddle

如果jsfiddle没有显示问题,那么在实时网站上查看 - &gt; site

只需向下滚动,在页脚上方有4个标签,点击“在新闻中”。

如果您还有其他需要,请告诉我并抱歉提出这个问题,但我找不到有效的答案。

1 个答案:

答案 0 :(得分:4)

使用jQuery时,您不需要进行跨浏览器检查(if(!event) event = window.event;等),因为jQuery会为您执行此操作。但是 应该将事件作为事件处理程序中的参数接受:

$('.article').on('click', function(event) {

我喜欢使用e作为惯例,以避免混淆:

$('.article').on('click', function(e) {