IE中的jQuery代码错误,但没有其他浏览器

时间:2010-09-29 03:47:19

标签: jquery internet-explorer-8

我有以下代码段..

我收到错误

  

预期的标识符,字符串或数字

就行......

    options.reference = '.' + $(this).attr('class');

然后在插件中......

  

Object不支持此属性或方法

就行......

        if ($target.is(options.reference) || $target.closest(options.reference).length)
            return false;

这些在IE浏览器中没有任何问题。它也是IE8,而不是6。 以下是整个插件,供参考。

jQuery.fn.dropdown = function () {
    var defaults = {
        reference: null,
        button: null,
        menu: null
    };
    return this.each(function () {

        // initialize options for each dropdown list, since there
        // very well may be more than just one.
        var options = $.extend(defaults, options);

        // specifically assign the option components.
        options.reference = '.' + $(this).attr('class');
        options.list = $(this);
        options.button = $(this).find('> a');
        options.menu = $(this).find('> div');

        // bind the lift event to the document click.
        // This will allow the menu to collapse if the user
        // clicks outside of it; but we will stop event bubbling to
        // keep it from being affected by the internal document links.
        $(document).click(function (e) {
            var $target = $(e.target);

            // check to see if we have clicked on one of the dropdowns, and if so, dismiss
            // the execution. We only want to lift one if we're not trying to interact with
            // one.
            if ($target.is(options.reference) || $target.closest(options.reference).length)
                return false;

            lift(e);
        });

        // when the button is clicked, determine the state of the
        // dropdown, and decide whether or not it needs to be lifted
        // or lowered.
        options.button.click(function (e) {
            options.menu.is(':visible') ? lift() : drop();
            e.stopPropogation(); // prevent event bubbling
        });

        // drop the menu down so that it can be seen.
        function drop(e) {
            // show the menu section.
            options.menu.show();
            // style the button that drops the menu, just for aesthetic purposes.
            options.list.addClass("open");
        }

        // lift the menu up, hiding it from view.
        function lift(e) {
            if (!options.menu.is(':visible'))
                return;
            options.menu.hide();

            // style the button that drops the menu, just for aesthetic purposes.
            options.list.removeClass('open');
        }
    });
};

1 个答案:

答案 0 :(得分:2)

该插件的设计很糟糕,如果该元素有多个类,$(this).attr('class')将返回一个像.class1 class2 classN这样的字符串来打破插件。

这不是IE问题,而是糟糕的代码。