2011-09-22 27 views
0

中关闭jquery ui模态。 我有一个使用jQuery UI插件生成在线模态窗口,因为这样的脚本:再次从另一个函数

function openModal(src, width, title){ 
    $("#" + src).dialog({ 
     modal: true, 
     width: width, 
     title: title, 
     resizable: false, 
     show: 'fade', 
     hide: 'fade' 
    }); 
    $('.ui-widget-overlay').hide().fadeIn(); 
    return false; 
} 

$(document).ready(function() { 
    $('#newTopicBtn').click(function(e) { 
     e.preventDefault(); 
     openModal('newTopic', 650, 'New Topic'); 
    }); 
}); 

模态窗口弹出,只是因为它应该。

大多数这些模式窗口打开某种形式。问题是,当表单提交,由脚本处理,我似乎无法获取表单的模式本身,收当我使用$('#newTopic').dialog("close")

$('#newTopic_form').bind('submit', function() { 
    var error = ''; 

    var topicTitle = $('input[name=newTopicTitle]').val(); 
    var topicBody = $('textarea[name=newTopicBody]').val(); 

    if(topicTitle == '' || topicTitle.length < 2) 
    { 
     error = error + '<br />You must enter a longer title.'; 
    } 
    if(topicBody == '' || topicBody.length < 2) 
    { 
     error = error + '<br />You must enter a longer topic.'; 
    } 

    if(error != '') 
    { 
     $('#newTopicError').css("display","none"); 
     $('#newTopicError').html(error); 
     $('#newTopicError').fadeIn(1000); 
    } 
    else 
    { 
     var pageUrl = window.location.search; 
     var pattern = /mode=viewcat&id=(\d+)&title/gi; 
     var catID = pageUrl.match(pattern); 

     var data = 'mode=newTopic&cat_id=' + catID + '&title=' + encodeURIComponent(topicTitle) + '&content=' + encodeURIComponent(topicBody) + '&u=' + usrId; 
     $.ajax({ 
      url: "data.php", 
      type: "POST", 
      dataType: "json", 
      data: data, 
      cache: false, 
      success: function(data) { 
       if(data.response == 'added') 
       { 
        $('#newTopicError').css("display", "none"); 
        $('#newTopicError').html("You have added your topic."); 
        $('#newTopicError').fadeIn(1000); 
        setInterval(10000, function(){ 
         $('#newTopic').dialog("close"); 
        }); 
       } 
      } 
     }); 
    } 
    return false; 
}); 

表单提交和处理完全正常,并且正确的字符串会淡入模态的窗体响应区域,但窗口永远不会关闭。

我的RegEx还存在一个问题,因为它只会返回null而不是catID,如果有人想要帮忙的话。 :)

回答

3

我觉得

setInterval(10000, function(){ 
    $('#newTopic').dialog("close"); 
}); 

应该是:

setTimeout(function(){ 
    $('#newTopic').dialog("close"); 
}, 10000); 

原始代码有错误的顺序参数,它说要关闭对话框 10秒。新代码具有正确顺序的参数,并且只会在设置后的10秒内执行一次。

+0

OP可能还想调查jQuery UI对话框autoOpen属性。 – BNL

+0

修好了!万分感谢!现在来找出这个RegEx ... – chaoskreator

+0

@chaoskreator:你可以在这个答案中添加函数(http://stackoverflow.com/questions/901115/get-query-string-values-in-javascript/5158301#5158301)到您的JS实用程序,然后使用'getParameterByName('id')'提取'id'字段。您可以避免以这种方式维护URL模式。 –

相关问题