JQuery UI диалог теряет значения при втором вызове (IE8) - PullRequest
0 голосов
/ 12 августа 2010

У меня есть страница с 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")

1 Ответ

1 голос
/ 26 августа 2010

Наконец-то с этим разобрались.

при закрытии: функция у меня была

$('#form-name')[0].reset();

Это для возврата формы к значениям по умолчанию после ввода данных. В IE он полностью стирает, устанавливает форму в нулевые значения, тогда как в Firefox он просто сбрасывает ее.

Пришлось изменить его на:

$('#form-name :text').val('');

для текстовых полей и сбросить идентификатор выбора для опций выбора.

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