malie0
malie0
2014-05-20 09:27
浏览 644
已采纳

easyui的form表单能否用同步的方式提交?

默认是异步的,有没有办法变成同步方式提交。因为碰到一个问题,在表单提交的success里用window.open打开新窗口会跳出新的浏览器窗口而不会变成新Tab页,只有在form表单提交的代码段之外window.open才会变成tab页。另外想请教ajax的success里用window.open打开新窗口会跳出新的浏览器窗口而不会变成新Tab页是什么原因?浏览器是chrome

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • lovejiegirl1
    lovejiegirl1 2014-05-20 14:49
    已采纳

    [code="java"]

    submit: function(jq, options){
    return jq.each(function(){
    var opts = $.extend({},
    $.fn.form.defaults,
    $.data(this, 'form') ? $.data(this, 'form').options : {},
    options||{}
    );
    ajaxSubmit(this, opts);
    });
    },

    function ajaxSubmit(target, options){
    options = options || {};

    var param = {};
    if (options.onSubmit){
    if (options.onSubmit.call(target, param) == false) {
    return;
    }
    }

    var form = $(target);
    if (options.url){
    form.attr('action', options.url);
    }
    var frameId = 'easyui_frame_' + (new Date().getTime());
    var frame = $('')
    .attr('src', window.ActiveXObject ? 'javascript:false' : 'about:blank')
    .css({
    position:'absolute',
    top:-1000,
    left:-1000
    });
    var t = form.attr('target'), a = form.attr('action');
    form.attr('target', frameId);

    var paramFields = $();
    try {
    frame.appendTo('body');
    frame.bind('load', cb);
    for(var n in param){
    var f = $('').val(param[n]).appendTo(form);
    paramFields = paramFields.add(f);
    }
    checkState();
    form[0].submit();
    } finally {
    form.attr('action', a);
    t ? form.attr('target', t) : form.removeAttr('target');
    paramFields.remove();
    }

    在cb函数中使用了setTimeout,如果你在success方法中使用window.open ,是页面直接调用或通过定时器等调用的,没有通过鼠标键盘事件,在google浏览器下是会弹出新窗口的。
    [/code]

    点赞 评论
  • lovejiegirl1
    lovejiegirl1 2014-05-20 10:20

    [code="java"]
    window.open(URL,name,features,replace)
    只有在设置了第三个参数才会打开新的窗口
    在没指定第三个属性时只会在当前窗口打开新的标签。
    (在IE中,如果要打开的URL与当前页面URL不属于同一个主域名则打开新窗口;
    在Chrome中,如果window.open()函数不是被鼠标键盘事件调用的,而是页面直接调用或通过定时器等调用的,则打开新窗口而非标签)

    既然用到了easyui,那可以使用tabs

    function addTab(title, url){

    if ($('#tt').tabs('exists', title)){

    $('#tt').tabs('select', title);

    } else {

    var content = ' src="'+url+'" style="width:100%;height:100%;">';

    $('#tt').tabs('add',{

    title:title,

    content:content,

    closable:true

    });

    }

    }

    在jquery中的ajax方法中可以指定同步请求
    jquery API中这样描述的:

    async (default: true)
    Type: Boolean
    By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active. As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done() or the deprecated jqXHR.success().
    代码如下:

    $.ajax({
    url: "test.html",
    data :[],

    });
    [/code]

    点赞 评论
  • lovejiegirl1
    lovejiegirl1 2014-05-20 10:21

    [code="java"]

    $.ajax({

    url: "test.html",

    data :[],
    async : false,

    });
    [/code]

    点赞 评论

相关推荐