1

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

例如:如果我从第一个选项卡单击更新按钮,我想添加#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 正常工作。

信息的每一个细节都值得赞赏。

4

2 回答 2

1

我知道使用 PHP 执行此操作的唯一方法是进行重定向。

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

这当然会导致另一个请求,并要求您对流程做一些解决方法,但这是将新 URL 发送回浏览器的唯一方法。

虽然它不是运行时 PHP 方法,但您也可以只嵌入选择 Javascript,例如:

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);
    }
});
于 2013-03-11T22:13:21.410 回答
0

今天脑洞大开,一边看MWJump的回答,一边想到了别的事情……为什么不用form的action属性呢!这是有原因的!因此,对于我的每个表单(我的每个选项卡中都有一个),我将 action 属性设置为相应选项卡的片段,因此对于第一个选项卡action="#tabs-1"和第二个选项卡action="#tabs2",依此类推...

在这种特殊情况下,我发现这个解决方案是最简单和最容易的。

于 2013-03-12T12:26:55.353 回答