У меня есть страница с 16 кнопками.При нажатии открывается диалоговое окно, и пользователь может выбирать различные элементы выбора (элемент, оператор и значение).
Это прекрасно работает в FF, но не так хорошо в IE8.
- Пользователь нажимает кнопку 1, вводит данные, закрывает диалоговое окно (FF, IE8 Good)
- Пользователь нажимает кнопку 2, вводит данные, закрывает диалоговое окно (FF, IE8 Good)
- Пользователь нажимаеткнопка 2 снова вводит данные, закрывает диалоговое окно (FF Good), (IE8 не работает)
Проблема возникает, только если пользователь нажимает одну и ту же кнопку подряд (обратите внимание, что два экземпляра не открываются одновременно прив то же время: пользователь нажимает кнопку 2, обрабатывает ее, закрывает, а затем нажимает кнопку 2 через несколько секунд).
Проблема заключается в том, что скрипт теряет значения формы.
Когдапри нажатии на кнопку устанавливаются следующие переменные:
var item = $("#name-item"),operator = $("#name-operator")
элемент будет выглядеть как "-tNAME", оператор - как "eq ="
при втором запуске $("#name-item")
и$("#name-operator")
пусто, так что это звучит как объявление / инициализацияпроблема, но где?
код диалога:
$("#dialog-form-name").dialog({autoOpen:false,height:450,width:350,modal:false,position:[675,200],buttons: {
'Add Name Filter': function() {
var item = $("#name-item"),operator = $("#name-operator"),value = $("#name-value"),disp=$('#name-item option:selected').text(),join = $("#name-join"),tn = $("#name-item").val().substr(0,2);
var allFields = $([]).add(item).add(operator).add(value).add(join),tips = $(".validateTips"),bValid = true;
allFields.removeClass('ui-state-error');
bValid = bValid && checkLength(value,"value",1,255);
bValid = bValid && checkRegexp(value,/^([\ \.\,\'\(\)0-9a-z_])+$/i,"Value may consist of a-z, 0-9, underscores, commas, spaces");
if(bValid) { updateTableRow('name',item,operator,value,join,disp,tn);$(this).dialog('close'); }
},
Cancel: function() { if(form_status == 'edit') { form_status = 'new';$('#' + rowid).removeClass('ui-state-highlight'); }$(this).dialog('close');$('#form-name')[0].reset();$('#form-name').removeClass('ui-state-error');}},
close: function() { if(form_status == 'edit') { form_status = 'new';$('#' + rowid).removeClass('ui-state-highlight'); }$('#form-name')[0].reset();$('#form-name').removeClass('ui-state-error');$(".validateTips").html();}
});
$("#dialog-form-course").dialog({autoOpen:false,height:450,width:350,modal:false,position:[675,200],buttons: {
'Add Course Filter': function() {
var item = $("#course-item"),value = $("#course-value"),join = $("#course-join"),disp=$('#course-item option:selected').text(),tn = $("#course-item").val().substr(0,2);
if(tn == '-n') { var operator = $("#course-operator-n"); } else { var operator = $("#course-operator-t"); }
var allFields = $([]).add(item).add(operator).add(value).add(join),tips = $(".validateTips"),bValid = true;
allFields.removeClass('ui-state-error');
bValid = bValid && checkLength(value,"value",1,255);
bValid = bValid && checkRegexp(value,/^([\ \.\,\'\(\)0-9a-z_])+$/i,"Value may consist of a-z, 0-9, underscores, commas, spaces");
if(operator.val() == 'beBetween') { if(checkRegexp(value,/[0-9]\ and\ [0-9]/i,"Value must have ' and ' between a range of numbers. Please see example below.") == false) { bValid = false;$("#example-course").html('<br /><em>Example:</em> ' + disp + ' Between 1 <strong>and</strong> 3'); } }
if(bValid) { updateTableRow('course',item,operator,value,join,disp,tn);$(this).dialog('close'); }
},
Cancel: function() { if(form_status == 'edit') { form_status = 'new';$('#' + rowid).removeClass('ui-state-highlight'); }$(this).dialog('close');$('#form-course')[0].reset();$('#form-course').removeClass('ui-state-error');}},
close: function() { if(form_status == 'edit') { form_status = 'new';$('#' + rowid).removeClass('ui-state-highlight'); }$('#form-course')[0].reset();$('#form-course').removeClass('ui-state-error');$(".validateTips").html('Choose an item to filter such as Course, Grade or Direction<br />An operator such as = or a Between range<br />Value such as an individual course, list of courses or value such as Left.');}
});
код кнопок:
$('#add-name').button({icons: {primary:'ui-icon-plus'}}).click(function(){form_status == 'new';$('#dialog-form-name').dialog('open');return false;});
$('#add-course').button({icons: {primary:'ui-icon-plus'}}).click(function(){$("#course-operator-t").show();$("#course-operator-n").hide();$("#course-value").autocomplete("option","disabled",false);$('#dialog-form-course').dialog('open');return false;});
Вы можете увидеть проблему здесь .
В IE нажмите на NAME, затем введите что-нибудь в поле значения и сохраните его.Теперь нажмите на ИМЯ и сделайте то же самое снова.Как только вы вводите что-либо, IE не работает, потому что он не может прочитать $("#name-operator")