好的,这就是我的情况:我有一个带有5个jquery-ui标签的页面,其中3个包含一个表格,每个表格都是由php为数据生成的,每个表格都有一组输入要根据日期,每个表都有自己的表单和更新按钮。现在我想要实现的是,一旦我刷新并返回控制器,我想根据我按下的按钮添加相应的片段。
例如:如果我点击第一个标签中的更新按钮,我想添加#tabs-1,如果是第二个,那么我想添加#tabs-2。
现在我知道我能做到:
$_SERVER['SCRIPT_URI'] = $_SERVER['SCRIPT_URI'] . "#tabs-2";
很好,它给了我正确的网址,但如何让浏览器在运行时去那里?有没有办法做到这一点?
这是我的控制器的一部分,主要是控制器。
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正常工作。
感谢信息的每一个细节。
答案 0 :(得分:1)
我知道用PHP执行此操作的唯一方法是进行重定向。
header('Location: ' . $_SERVER['REQUEST_URI'] .'#tabs-2');
这当然会导致另一个请求,并要求您对流程进行一些解决方法,但这是将新网址发送回浏览器的唯一方法。
虽然它不是运行时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);
}
});
答案 1 :(得分:0)
今天,凭借一种清新的头脑,我在阅读MWJump的答案时想到了别的事情......为什么不使用表单的action属性!这是有原因的!因此,对于我的每个表单(我的每个选项卡中都有一个),我将action属性作为相应选项卡的片段,以便第一个选项卡action="#tabs-1"
和第二个action="#tabs2"
等等...
我发现这个解决方案在这种特殊情况下是最简单和最简单的。