2009-08-12 67 views
2

我有一个着陆页,有几个动作。该操作位于默认隐藏的表格行内,并在用户单击操作标题时打开。我想根据查询字符串变量来控制显示/隐藏的内容。我该如何根据查询字符串变量使用jQuery show()hide()表行?

例如,其中一个操作是“请求呼叫”。该网站的其他页面上有链接请求打电话。当用户点击该链接时,我希望他们通过显示的“请求呼叫”行转到登录页面。

+0

你能告诉我们你的HTML,JS代码? – RaYell 2009-08-12 15:31:58

回答

1

将从this articleCMS'sexcellent answersimilar question的内容删除。

使用名为showRow的查询字符串变量并将其传递给要显示的行的id(不是非常复杂但是一个好的起点)。

使用jQuery的显示请求的行:

<table> 
    <thead> 
    <tr> 
     <th>col 1</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr id="row1" style="display: none;"> 
     <td>this is row 1</td> 
    </tr> 
    <tr id="row2" style="display: none;"> 
     <td>this is row 2</td> 
    </tr> 
    </tbody> 
</table> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     var row = getQueryString()["showRow"]; 
     if (row !== undefined) $("table tr#" + row + "").show(); 
    }); 

    getQueryString = function() { 
     var assoc = []; 
     var keyValues = unescape(location.search.substring(1)).split('&'); 
     for (var i in keyValues) { 
      var key = keyValues[i].split('='); 
      assoc[key[0]] = key[1]; 
     } 
     return assoc; 
    } 
</script> 
+0

如果您将所有内容都放在一个页面中,您可能需要更多内容:http://www.contentwithstyle.co.uk/content/fixing-the-back-button-and-enabling-bookmarking-for -ajax-应用 – 2009-08-13 13:56:58

0

难道你不能做一些服务器端处理来产生必要的处理吗?即使用RAW PHP,你还没有说服务器端语言,你可以这样做:

<? 
$showRow = ""; 
switch($_GET['title']) 
{ 
    case "call": 
    //$showRow is the id of the row to be shown 
    $showRow ="call" 
    break; 
} 
?> 

...rest of page.... 

<script type="text/javascript"> 
    $(document).ready(function() { 
    //show the row 
    $("#<?=$showRow;?>").show(); 
    }); 
</script> 

您还可以设置行的id是URL参数切出一个交换机的需求。你还需要做一些空测试,以确保如果没有显示URL参数,jquery不会显示一行。

+0

我总是对使用JavaScript嵌入服务器端标签感到有点紧张。也许可以考虑把它放在页面上的隐藏变量,并通过jQuery访问? – 2009-08-12 15:40:34

+0

我可以理解你来自哪里,这就是为什么我将交换机固定在那里以防止任何XSS尝试,唯一可以传递给JavaScript的值是在服务器端代码中设置的值,但是通过网址参数。 隐藏的输入变量总是一个选项,但我个人讨厌把它们扔进去,除非绝对必要。 – 2009-08-12 15:45:24