【问题标题】:tabs submiting form on new window, why?标签在新窗口上提交表单,为什么?
【发布时间】:2013-12-17 18:37:46
【问题描述】:

我有一个问题。

我一直在使用Tabs(小部件 jqueryUi)。

似乎一切正常,但有时当我提交表单(在选项卡内)时,结果出现在窗口中,而不是在 tabdiv 中。

我不希望这样,客户端必须保留在网络系统中。

我已经尝试在表单中输入target="_self",但有时会继续这样做。

var $tabs = $("#main").tabs({
    tabTemplate: "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close notext inline'>Remove Tab</span></li>",
    idPrefix: "tab_",
    add:function(e, ui){
        $tabs.tabs('select', '#' + ui.panel.id).show("blind");
        $j( "#list_tabs .ui-icon-close:last" ).on( "click", function(e, elemento) {
            var index = $( "li", $("#main").tabs() ).index( $( this ).parent() );
            $("#main").tabs( "remove", index );

            desativarItemSubmenu($('#' + $(this).parent()[0].id.replace('tab_', '')));
        });
    },

    select: function(event, ui){
        var id = $(ui.tab).parent()[0].id;
        if(id)
            ativarItemSubmenu($('#' + id.replace('tab_', '')));
    },
    cache:true,
    ajaxOptions: {async: false,cache: false}
})


$(".anchor").live("click", function(){
    if("<?php echo $this->session->userdata("cod_usuario") ?>" == ""){
        window.location.reload;
    }
    var url = this.rel;
    var tab_title = this.text;
    var tab_id = "tab_"+this.id;

    if(!$('#' + tab_id).length){
        if($('#main').tabs('length') > 3)
            $("#main").tabs("remove", 3);

        $("#main").tabs("add", url, tab_title);
        $("#list_tabs li:last").attr("id", tab_id); 
        $("#list_tabs li:last").addClass("active");
    }
    else{
        $('#main').tabs('option', 'selected', $('#' + tab_id).index());
    }
})

// Remove a tab clicando no "x" (remove tab by click on "x")
$( "#main span.ui-icon-close" ).live( "click", function() {
    var index = $( "li", $("#main").tabs() ).index( $( this ).parent() );
    $("#main").tabs( "remove", index );
});

【问题讨论】:

  • live 在 1.7 中被弃用并在 jQuery 1.9 中被移除。停止使用它并开始使用on()
  • epascarello,我在系统中使用的是 jquery-1.5.1,所以我认为这不是我的问题。
  • 啊,2011 年发布的版本。我想您可能想要升级。 ;)
  • 该代码中的表单提交在哪里?它是页面上的表格吗?表格是什么样子的?有错误吗?如何将表单加载回 div?
  • 我在其他页面中有很多表格。这就是我使用动态标签的原因。

标签: javascript jquery forms jquery-ui jquery-ui-tabs


【解决方案1】:

我对这个答案并不完全有信心,但如果不是解决方案,那么也许它会给你带来解决方案的想法。

您似乎正在动态更改选项卡的 ID 属性。当你改变一个元素的 ID 时,你将它从 DOM 中移除——或者更确切地说,你将它作为一个新元素重新注入到 DOM 中。因此,以前绑定到该元素的任何 javascript 都不再绑定。由于您使用的是 jQuery UI 选项卡,因此更改后的元素可能不再是选项卡。

这可能会导致您描述的问题类型。

解决方案:重构代码以使用您添加/删除的类,而不是更改选项卡 ID。

作为一般规则,在动态更改 ID 时要格外小心。

【讨论】:

  • 我正在创建动态标签。这就是我这样做的原因。并非总是如此。有时相同的表单可以完美运行,但有时会在窗口中打开。
  • 您是否注意到 (1) 动态创建选项卡时和 (2) 将数据写入到 tabdiv 外部时是否存在相关性?
  • 不,还没有。有时出现在第二个选项卡中,有时出现在第三个选项卡中,但从来没有。
猜你喜欢
  • 2012-04-07
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 2012-01-04
  • 2014-08-27
  • 1970-01-01
相关资源
最近更新 更多