使用jQuery $('#selector')间歇性IE问题。删除Data()

时间:2010-03-02 20:25:04

标签: jquery internet-explorer-8

我有一个表单,它使用jQuery-UI的selectable插件来填充表中的列表。我的表单还允许用户在他们改变主意时删除单个或多个列表项。此功能适用于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 个答案:

答案 0 :(得分:1)

首先承认我根本没有使用过可选择的东西,所以,在黑暗中拍摄,你可以链接吗?

this.grpselections.empty().removeData();

答案 1 :(得分:0)

此处信息不足。尝试调试器;代码中的语句并打开ie8开发人员工具来调试脚本并查看发生了什么。