Непостоянная проблема IE с jQuery $ ('# selector'). removeData () - PullRequest
1 голос
/ 02 марта 2010

У меня есть форма, которая использует плагин select jQuery-UI для заполнения списка из таблицы. Моя форма также позволяет пользователям удалять один или несколько элементов списка, если они передумали. Эта функция работает в IE и Firefox. Список также автоматически очищается, и форма сбрасывается, если пользователь решает загрузить свой список. Это также работает в IE и Firefox.

Наконец, я добавил кнопку, которая удаляет все элементы списка и сбрасывает форму, если пользователь хочет начать все заново. Эта функция работает только в Firefox. В IE элементы списка удаляются из поля, в котором они находятся, но по какой-то причине $('#newgroups').removeData() игнорируется. Я знаю это, потому что после .remove или .tofile я могу добавить группу с тем же именем, что и у предыдущей, но более не существующей группы. После .clear, хотя форма выглядит одинаково, создание элемента списка с ранее использованным именем группы завершается неудачей.

Вот код (я исключил тела функций, которые не связаны с удалением элементов списка или сбросом формы):

$(function(){
    $('#selectable').selectable({
         //rules for how table elements can be selected
    });

    $("input[name='makegroup']").live("click", function(event){
        //adding list items
    });

    $("input[name='removegroup']").live("click", function(event){
        event.preventDefault();
        groups.msg();
        groups.remove(); //works in FF and IE
    }); 

    $("input[name='cleargroups']").live("click", function(event){
        event.preventDefault();
        groups.msg();
        return groups.clear(); //partially fails in IE
    });

    $("form#grouper").submit(function(){
        return groups.tofile(); //works in FF and IE
    });

    groups={
        grpmsg: $('#grpmsg'),
        grpselections: $('#newgroups'),
        grpname: $("input[name='newgroup']"),
        filetext: $("input[name='filetext']"),

        add: function(){
            //add option to this.grpselections and set this.grpselections.data
            //compares input data to $grpselections.data() for problems and throws error if necessary               
        },

        remove: function(){
            var vals= this.grpselections.val();//selected list items
            for(var i in vals){
                this.grpselections.data(vals[i]).removeClass('ui-selected chosen');
                this.grpselections.removeData(vals[i]);
            }
            this.grpselections.find(':selected').remove();
            this.grpname.focus();
        },

        clear: function(){ //identical to tofile method of resetting form
            this.grpselections.empty();
            this.grpselections.removeData();//DOES NOT WORK IN IE
            $('#selectable td').removeClass('ui-selected chosen');
            this.grpname.focus();
            return true;
        },  

        tofile: function(){
            this.grpselections.select();
            var gtxt='';
            this.grpselections.find('option').each(function(i){
                gtxt += $(this).text() + "\n";
            });
            if (gtxt.length === 0) {
                this.msg('nonetofile');
                return false;
            }
            this.filetext.val(gtxt);

            //BELOW IS IDENTICAL TO clear function EXCEPT IT WORKS IN IE TOO
            this.grpselections.empty();
            this.grpselections.removeData();
            $('#selectable td').removeClass('ui-selected chosen');
            this.grpname.focus();
            return true;
            //END INTERESTING BIT
        },

        msg: function(msgtype){
                //show error message specific to problem
    },

        addline: function(groupname){
            //auxilliary to add function                
        }
    };

});

Ответы [ 2 ]

1 голос
/ 03 марта 2010

Ну, во-первых, чтобы признаться, я вообще не использовал выбираемый материал, ТАК учитывая, что выстрел в темноте, вы можете приковать?

this.grpselections.empty().removeData();
0 голосов
/ 02 марта 2010

Недостаточно информации здесь. Попробуйте поставить отладчик; утверждение в коде и открытие инструментов разработчика ie8 для отладки скрипта и просмотра происходящего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...