从另一个函数中关闭jquery ui模式

从另一个函数中关闭jquery ui模式,jquery,regex,jquery-ui,jquery-ui-dialog,Jquery,Regex,Jquery Ui,Jquery Ui Dialog,再说一遍。 我有一个使用jQuery UI插件生成内联模式窗口的脚本,例如: function openModal(src, width, title){ $("#" + src).dialog({ modal: true, width: width, title: title, resizable: false, show: 'fade', hide: 'fade' });

再说一遍。 我有一个使用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')时,我似乎无法让表单的模式自行关闭。对话框(“关闭”)

$('newTopic'u form').bind('submit',function(){
var错误=“”;
var topicTitle=$('input[name=newTopicTitle]')。val();
var topicBody=$('textarea[name=newTopicBody]')。val();
如果(topicTitle=''| | topicTitle.length<2)
{
error=error+“
您必须输入更长的标题。”; } if(topicBody=''| | topicBody.length<2) { error=error+“
您必须输入更长的主题。”; } 如果(错误!='') { $('newTopicError').css(“显示”、“无”); $('#newTopicError').html(错误); $('newTopicError')。fadeIn(1000); } 其他的 { var pageUrl=window.location.search; var pattern=/mode=viewcat&id=(\d+)&title/gi; var catID=pageUrl.match(模式); var data='mode=newTopic&cat_id='+catID+'&title='+encodeURIComponent(topicTitle)+'&content='+encodeURIComponent(topicBody)+'&u='+usrId; $.ajax({ url:“data.php”, 类型:“POST”, 数据类型:“json”, 数据:数据, cache:false, 成功:功能(数据){ 如果(data.response==“已添加”) { $('newTopicError').css(“显示”、“无”); $('#newTopicError').html(“您已经添加了您的主题。”); $('newTopicError')。fadeIn(1000); setInterval(10000,函数(){ $('#newTopic')。对话框(“关闭”); }); } } }); } 返回false; });
表单提交并得到完美处理,正确的字符串消失在模态的表单响应区域中,但窗口永远不会关闭

我的正则表达式也有一个问题,因为它只返回null而不是catID,如果有人想帮助解决这个问题的话。:)

我想

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

setTimeout(function(){
    $('#newTopic').dialog("close");
}, 10000);
原始代码的参数顺序错误,并且它说您希望每10秒关闭一次对话框。新代码的参数顺序正确,只执行一次,距离设置时间只有10秒。

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

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

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

OP可能还想研究jquery ui dialog autoOpen属性。@ChaosCreator:您可以将此答案()中的函数添加到JS实用程序中,然后使用
getParameterByName('id'))
提取
id
字段。您可以避免以这种方式维护URL模式。OP可能还希望调查jquery ui对话框的autoOpen属性。@ChaosCreator:您可以将此答案()中的函数添加到JS实用程序中,然后使用
getParameterByName('id')
提取
id
字段。这样可以避免维护URL模式。