jquery ui对话框在第二次调用时丢失值(IE8)

时间:2010-08-11 21:25:57

标签: jquery-ui autocomplete

我有一个有16个按钮的页面。单击时,将打开一个对话框,用户可以选择各种选择元素(项目,运算符和值)。

这在FF中很有用,但在IE8中却不太好。

  • 用户点击按钮1,输入数据,关闭对话框(FF,IE8 Good)
  • 用户点击按钮2,输入数据,关闭对话框(FF,IE8 Good)
  • 用户再次点击按钮2,输入数据,关闭对话框(FF Good),(IE8失败)

问题只发生在用户连续点击相同的按钮时(注意两个实例不同时打开:用户单击按钮2,处理它,关闭它,然后稍后点击按钮2)。 / p>

问题在于脚本丢失了表单值。

单击该按钮时,将设置以下变量:

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;});

You can see the problem here

在IE中单击NAME,然后在值框中输入任何内容并保存。现在点击NAME并再次执行相同的操作。一旦输入任何IE失败,因为它无法读取$("#name-operator")

1 个答案:

答案 0 :(得分:1)

最后解决了这个问题。

关闭:我有的功能

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

这是在输入数据后将表单重置为默认值。在IE中它完全擦除将表单设置为空值,而在Firefox中它只是重置它。

不得不改为:

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

表示文本字段并重置选择选项的选择ID。