У меня есть форма, которая использует плагин 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
}
};
});