2013-03-11 74 views
1

好的,这是我的情况:我有一个页面有5个jquery-ui选项卡,其中3个包含每个由php为数据生成的表格,每个表格都有一组根据日期进行过滤输入,每个表格都有自己的表格和更新按钮。现在我想要实现的是一旦我刷新并返回到控制器,我想根据按下的按钮添加相应的片段。在php运行时添加片段到url

例如:如果我从第一个选项卡点击更新按钮,我想添加#tabs-1,如果是第二个,那么我想添加#tabs-2。

现在我知道我可以这样做:

$_SERVER['SCRIPT_URI'] = $_SERVER['SCRIPT_URI'] . "#tabs-2"; 

精细,让我正确的URL,但如何让浏览器去那里在运行时?有没有办法做到这一点?

这是我的控制器的一部分,主要的一部分。

class PageOptimisationV2C { 

public static function main() { 
    $class = __CLASS__; 
    $c = new $class; 

    $c->get(); 
} 

public function get() { 
    $this->display(); 
} 

private function display() { 
    $tpl = new PageOptimisationV2V(); 

    $client = ConsulterClient::getClientByNoClient(isset($_GET['cid']) ? $_GET['cid'] : 0); 
    $tpl->client = $client; 

    if(isset($_GET['cid'])){ 

     $tpl->StatsLignesCellulaire = self::buildCellStatsReport(); 
    } 

    $_SERVER['SCRIPT_URI'] = $_SERVER['SCRIPT_URI'] . "#tabs-2"; 


    $tpl->display(); 
} 
} 

然后它继续并显示页面。根据按下的提交按钮,到达页面片段的最佳解决方案是什么?

我试图让一个jsFiddle向您展示页面的外观,但它太乱了,无法让CSS正常工作。

每一个细节的信息表示赞赏。

回答

1

我知道这样做与PHP的唯一方法是做一个重定向。

header('Location: ' . $_SERVER['REQUEST_URI'] .'#tabs-2'); 

这当然会导致另一个请求,并要求你做一些变通方法与你的流量,但它发送一个新的URL返回给浏览器的唯一途径。

虽然它是不是你也可以直接嵌入选择的Javascript,例如运行PHP方法:

var index = $.index($(<?PHP echo $tab; ?>)); 
$('#tabs ul').tabs('select', index); 

,并允许其通过正常的选择过程。

你也可以嵌入一个隐藏的元素,像

<input type="hidden" name="tab-selected" id="tab-selected" value="tabs-2" /> 

,并有一些JavaScript来检查,如果该元素存在,并且有一个值,然后选择这样的标签:

$(function() { 
    if ($('#tab-selected').val()) { 
     var index = $.index($('#tab-selected').val())); 
     $('#tabs ul').tabs('select', index); 
    } 
}); 
+0

我喜欢你的建议,明天早上当我明天工作的时候会尝试第一件事! – Rayfloyd 2013-03-12 01:20:33

0

今天,我有了新的想法,在阅读MWJump的答案时我想到了别的事情......为什么不使用表单的action属性!这是有原因的!因此,对于我的每个表单(每个标签中都有一个),我将拍摄属性设为相应选项卡的片段,以便第一个标签action="#tabs-1"和第二个action="#tabs2"等等......

I发现这个解决方案在这个特殊情况下是最简单和最简单的。

+0

结果片段在服务器端不可用一次... – Rayfloyd 2013-03-12 18:55:13