ASP动态导航所在当页面时的有独立突出的样式,急!在线等

jiangfubiao 2012-10-09 02:26:55
在ASP里本人想实现所在动态导航在当页面时的有独立突出的样式,
这在各部分网站上可看到,导航是后台添加的
为了能让各们大哥大姐帮我的忙,我将问题出明白一点
<%
dim Navigation
set Navigation=server.CreateObject("adodb.recordset")
Navigation.open "select * from menu where yc=1 order by px_id asc",conn,1,1
while not Navigation.eof%>
<%dim urlname,addressname
urlname=Request.ServerVariables("QUERY_STRING")
addressname=Request.ServerVariables("SCRIPT_NAME")
if urlname<>"" then
addressname=addressname+"?" +urlname
end if%>

<li><a href="<%=Navigation("url")%>" target="<%=Navigation("openfs")%>" <%if addressname=""&Navigation("url")&"" then%> class="on"<%end if%>><%=Navigation("title")%></a></li>

<%Navigation.movenext
wend
Navigation.close
set Navigation=nothing
%>

通过以上代码的判断已经实现了导航所在当前页面地址有独立的样式

所在这个导航页面时实现的这个样式,输出后代码如下
<li><a href="/case.asp" target="_self" class="on">客户案例</a></li>

可是如果当前页面为"/case.asp?id=1" 时导航地址时就不能实现以上输出内容,样式不会停在这个导航上,只能为

<li><a href="/case.asp" target="_self" >客户案例</a></li> 则不能有上面的效果

因为这是一个频道的内容,所以导航样式想让他停在这个"/case.asp"导航上
还有,如果当前面面为"Showcase.asp?id=1" 也要想这个导航样式停这个"/case.asp"导航上,

以此类推!

小弟不才,望能得到各大高人的指示,以些为谢谢,在线等!
...全文
268 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
toury 2012-10-10
  • 打赏
  • 举报
回复
我好久好久没写ASP代码了,所以手生的很。再次道歉,兄弟!
toury 2012-10-10
  • 打赏
  • 举报
回复
回2楼,是我的错,汗~~
sUrl=Navigation("url")&""
If InStr(url,".asp?")>0 Then url=sUrl & "&navID=" & i Else url=sUrl & "?navID=" & i
-------->应该是
If InStr(sUrl,".asp?")>0 Then url=sUrl & "&navID=" & i Else url=sUrl & "?navID=" & i

我的本意是判断数据库里的超链接(sUrl)如果已经带参数了就用&加个新参数navID;如果没有直接用?加参数navID. 变量打错了,对不起

jiangfubiao 2012-10-10
  • 打赏
  • 举报
回复
(理上网来)意思我是已经理解到了,不过在每访问一下页面时,后面会多一个?navID=4 像这类的尾巴就能实现

但是,不知道是代码有误还有怎么的,
当case.asp?navID=4 访问正常,可实现,
而下一个导航就成team.asp&navID=5 访问地址出错 不可现实
而在下一导航又成了Job.asp?navID=6 访问正常,可实现
就是这样的

<li id='liID1'><a href=/about.asp?id=1?navID=1 target=_self class=on>关于我们</a>
</li><li id='liID2'><a href=/News.asp&navID=2 target=_self class=>新闻中心</a>
</li><li id='liID3'><a href=/Products.asp?navID=3 target=_self class=>产品介绍</a>
</li><li id='liID4'><a href=/case.asp&navID=4 target=_self class=>客户案例</a>
</li><li id='liID5'><a href=/team.asp?navID=5 target=_self class=>设计团队</a>
</li><li id='liID6'><a href=/Job.asp&navID=6 target=_self class=>招贤纳士</a>
</li><li id='liID7'><a href=/project.asp?navID=7 target=_self class=>服务项目</a>
</li><li id='liID8'><a href=/Planning.asp&navID=8 target=_self class=>解决方案</a>
</li><li id='liID9'><a href=/book?navID=9 target=_self class=>联系我们</a>

访问会有错误!

主要的代码:If InStr(url,".asp?")>0 Then url=sUrl & "&navID=" & i Else url=sUrl & "?navID=" & i

主要的代码改为:If InStr(url,".asp?")>0 Then url=sUrl & "&navID=" & i Else url=sUrl & "?navID=" & i

<li id='liID1'><a href=/about.asp?id=1&navID=1 target=_self class=on>关于我们</a>
</li><li id='liID2'><a href=/News.asp?navID=2 target=_self class=>新闻中心</a>
</li><li id='liID3'><a href=/Products.asp?navID=3 target=_self class=>产品介绍</a>
</li><li id='liID4'><a href=/case.asp?navID=4 target=_self class=>客户案例</a>
</li><li id='liID5'><a href=/team.asp?navID=5 target=_self class=>设计团队</a>
</li><li id='liID6'><a href=/Job.asp?navID=6 target=_self class=>招贤纳士</a>
</li><li id='liID7'><a href=/project.asp?navID=7 target=_self class=>服务项目</a>
</li><li id='liID8'><a href=/Planning.asp?navID=8 target=_self class=>解决方案</a>
</li><li id='liID9'><a href=/book?navID=9 target=_self class=>联系我们</a>
导航里的内容就没有问题了,可以实现


在访问内容页面的Showcase.asp就是Showcase.asp?id=1(不在导航里)

而不是Showcase.asp?id=1&navID=4 手动在后面加可以实现,
jiangfubiao 2012-10-10
  • 打赏
  • 举报
回复
错误类型:
Microsoft VBScript 编译器错误 (0x800A03EA)
语法错误
/config.asp, line 288
function getcls(url)()
jiangfubiao 2012-10-10
  • 打赏
  • 举报
回复
"showbo"大哥的是这样用的,可一上代码就语法错误
/config.asp, line 265
function getcls(url)

我在的页面中用调用的方式,直接调用为:
<%=cs_Navigation%>
<%
function cs_Navigation()'菜单导航调用参数
dim Navigation
set Navigation=server.CreateObject("adodb.recordset")
Navigation.open "select * from menu where yc=1 order by px_id asc",conn,1,1

function getcls(url)
dim cls
select case url
case "/case.asp"
if instr(addressname,"case.asp")<>0 or instr(addressname,"showcase.asp")<>0 then cls=" class=""on"""
case "/Planning.asp"
if instr(addressname,"case.asp")<>0 or instr(addressname,"ShowPlanning.asp")<>0 then cls=" class=""on"""
case "/Products.asp"
if instr(addressname,"case.asp")<>0 or instr(addressname,"ShowProducts.asp")<>0 then cls=" class=""on"""
case "/news.asp"
if instr(addressname,"case.asp")<>0 or instr(addressname,"ShowNews.asp")<>0 then cls=" class=""on"""
end select
getcls=cls
end function

dim urlname,addressname
addressname=Request.ServerVariables("SCRIPT_NAME")
while not Navigation.eof%>
<li><a href="<%=Navigation("url")%>" target="<%=Navigation("openfs")%>" <%=getcls(lcase(Navigation("url")))%>><%=Navigation("title")%></a></li>
<%Navigation.movenext
wend
Navigation.close
set Navigation=nothing
end function
%>
toury 2012-10-10
  • 打赏
  • 举报
回复
你有两个需求:
1、导航样式想让他停在这个"/case.asp"导航上
2、如果当前面面为"Showcase.asp?id=1" 也要想这个导航样式停这个"/case.asp"导航上,

我的代码问题出在哪里?是两个都不满足,还是有一个可以一个不可以,还是代码上来就报错?加Q就不必要了,你把状况说说就可以了

Go 旅城通票 2012-10-10
  • 打赏
  • 举报
回复
你怎么用的,贴完整的代码出来看看,肯定是你修改出错了
jiangfubiao 2012-10-10
  • 打赏
  • 举报
回复
"理上网来"大哥的还是不行啊!还有 “showbo”大哥的,会语法错误,语句未结束之类的出现,为了方便交流,能不能加我QQ:495573637!
toury 2012-10-10
  • 打赏
  • 举报
回复
把红字删除
If trim(sUrl)="/case.asp" Then nodeID="liID"&i,nodeClass=myclass'记录case.asp的样式名
---------->>
If trim(sUrl)="/case.asp" Then nodeClass=myclass'记录case.asp的样式名

toury 2012-10-10
  • 打赏
  • 举报
回复

<%
dim Navigation,navID
navID=Trim(request.QueryString("navID"))
if navID="" then navID=1

set Navigation=server.CreateObject("adodb.recordset")
Navigation.open "select * from menu where yc=1 order by px_id asc",conn,1,1

Dim i,myclass,sUrl,url,nodeID,nodeClass
i=0
while not Navigation.eof
i=i+1
sUrl=Navigation("url")&""
If InStr(url,".asp?")>0 Then url=sUrl & "&navID=" & i Else url=sUrl & "?navID=" & i
response.write("<li id='liID"&i&"'>")

if i-navID=0 then myclass="on" else myclass=""
If trim(sUrl)="/case.asp" Then nodeID="liID"&i,nodeClass=myclass'记录case.asp的样式名
If trim(sUrl)="Showcase.asp?id=1" Then myclass=nodeClass'设为case.asp的样式

response.write("<a href="&url&" target="&Navigation("openfs")&" class="&myclass&">"&Navigation("title")&"</a>")
response.write("</li>")
Navigation.movenext
Wend

If Navigation.state<>0 Then Navigation.close()
set Navigation=nothing
%>


toury 2012-10-10
  • 打赏
  • 举报
回复
我想,我有点明白了楼主的意思了。需求是不是这样:

导航栏对应的高亮已经没问题了,不说了。
剩下的问题是当前页面为Showcase.asp?id=1 --- Showcase.asp?id=1000的任何一个页面的时候,你也想让导航栏的高亮回到 [客户案例] 上,对吗?

关键是Showcase.asp?id=1-1000并没有出现在导航栏里,可能是在其他页面的内链接或某个子菜单里跳转过去的,是这样吗?

如果是,那就就完全不必再在服务端代码里打转转了。而是应该在Showcase.asp文件中的客户端代码中用js设置一下导航栏的式样,使之回到【客户案例】高亮就可以了

show.asp页面加JS:
<script>
window.onload=function(){
document.getElementById("liID4").className="on"
}
</script>

如果show.asp?id=xxxxxxx,其中id>1000的页面显示时你不想让【客户案例】高亮,那就再做个判断
<script>
window.onload=function(){
var pa=location.search;//得到?id=xxx&yyy=5这样的字串
//用正则或split得到id的数字
// ......
id=xxx;
if(id<1001) document.getElementById("liID4").className="on";
}
Go 旅城通票 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]

18楼的,访问是正常的,但是效果实现不了呀,
HTML code
<%cs_Navigation()%> '我是调用这这个
getcls(url) ‘这个在调用里面就不管吗?
[/Quote]
Navigation("url")

到底是什么?是/case.asp这种没有,代码给你了自己照着改啊。。
jiangfubiao 2012-10-10
  • 打赏
  • 举报
回复
18楼的,访问是正常的,但是效果实现不了呀,
<%cs_Navigation()%> '我是调用这这个
getcls(url) ‘这个在调用里面就不管吗?
  • 打赏
  • 举报
回复
你们都知道楼主说的是什么意思吗?我怎么就看不明白呢。
Go 旅城通票 2012-10-10
  • 打赏
  • 举报
回复
#11楼函数嵌套了。。


<%
'function不能嵌套======================
function getcls(url)'url传递的时候已经lcase过,所以case语句里面的小写就好了
dim cls
select case url
case "/case.asp"
if instr(addressname,"case.asp")<>0 or instr(addressname,"showcase.asp")<>0 then cls=" class=""on"""
case "/planning.asp"
if instr(addressname,"planning.asp")<>0 or instr(addressname,"showplanning.asp")<>0 then cls=" class=""on"""
case "/products.asp"
if instr(addressname,"products.asp")<>0 or instr(addressname,"showproducts.asp")<>0 then cls=" class=""on"""
case "/news.asp"
if instr(addressname,"news.asp")<>0 or instr(addressname,"shownews.asp")<>0 then cls=" class=""on"""
end select
getcls=cls
end function

'===========================
function cs_Navigation()'菜单导航调用参数
dim Navigation
set Navigation=server.CreateObject("adodb.recordset")
Navigation.open "select * from menu where yc=1 order by px_id asc",conn,1,1



dim urlname,addressname
addressname=lcase(Request.ServerVariables("SCRIPT_NAME"))'=========转为小写
while not Navigation.eof%>
<li><a href="<%=Navigation("url")%>" target="<%=Navigation("openfs")%>" <%=getcls(lcase(Navigation("url")))%>><%=Navigation("title")%></a></li>
<%Navigation.movenext
wend
Navigation.close
set Navigation=nothing
end function
%>
kqyx_cn 2012-10-10
  • 打赏
  • 举报
回复
http://www.ancher.cn/blog/article.asp?id=292 这里有现成的例子,有代码,比较简单,应该看看就明白道理了。
toury 2012-10-10
  • 打赏
  • 举报
回复
1)你那样通过Request.ServerVariables()定位查找变量很费服务器资源的(尽管少了小尾巴,但代价太大);

2)要是这样的话,我倒是觉得你不必非要在服务端做这个工作。用客户端代码改变节点控件的样式不是更方便吗?又可以节省服务器资源,何乐不为呢?服务器只需要判断如果超链接含有“Showcase.asp?”字串,就给li节点加个id :<li id='show_case'>.............</li>

页面加JS:
<script>
window.onload=funtion(){
document.getElementById("show_case").className="on"
}
</script>
jiangfubiao 2012-10-10
  • 打赏
  • 举报
回复
没关系的,谢谢你耐心的解答
但这样的方法,与我以前的实现效果是一样的,
但我又改了一下我的,后面还没有尾巴!
<%
function zych_Navigation()'菜单导航调用参数
dim Navigation
set Navigation=server.CreateObject("adodb.recordset")
Navigation.open "select * from menu where yc=1 order by px_id asc",conn,1,1
while not Navigation.eof%>
<%dim urlname,addressname
urlname=Request.ServerVariables("QUERY_STRING")
addressname=Request.ServerVariables("SCRIPT_NAME")
if urlname<>"" then
addressname=addressname+"?" +urlname
end if
urlname_1=Request.ServerVariables("SCRIPT_NAME")%>

<li><a href="<%=Navigation("url")%>" target="<%=Navigation("openfs")%>" <%if addressname=""&Navigation("url")&"" or urlname_1=""&Navigation("url")&"" then response.Write "class=""on""" end if%><%if then response.Write "class=""on""" end if%> > <%=Navigation("title")%></a></li>

<%Navigation.movenext
wend
Navigation.close
set Navigation=nothing
end function
%>

我想的是在访问,如Showcase.asp?id=1 这些页面时,能进归在case.asp的导航样式里,
就是当前页为,Showcase.asp?id=1-1000 时导航样式还是case.asp 这个的,
就是不知道怎么实现,还各位大哥明示啊!
Go 旅城通票 2012-10-09
  • 打赏
  • 举报
回复
带参数的好弄,不链接和对比参数就行了,但是showcase.asp这种由于文件名不一样,所以你需要一个对照表,当栏目url为case.asp时需要和那些文件名对比


<%
dim Navigation
set Navigation=server.CreateObject("adodb.recordset")
Navigation.open "select * from menu where yc=1 order by px_id asc",conn,1,1


function getcls(url)
dim cls
select case url
case "/case.asp"
if instr(addressname,"case.asp")<>0 or instr(addressname,"showcase.asp")<>0 then cls=" class=""on"""
'case ""'...其他的
end select
getcls=cls
end function

'变量定义移动到循环外,要不每次都定义重新获取浪费
dim urlname,addressname
'urlname=Request.ServerVariables("QUERY_STRING")'也不需要了,不对比参数
addressname=Request.ServerVariables("SCRIPT_NAME")
'下面的不需要了,因为你的要求就是不对比参数
'if urlname<>"" then
'addressname=addressname+"?" +urlname
'end if
while not Navigation.eof%>
<li><a href="<%=Navigation("url")%>" target="<%=Navigation("openfs")%>" <%=getcls(lcase(Navigation("url")))%>><%=Navigation("title")%></a></li>
<%Navigation.movenext
wend
Navigation.close
set Navigation=nothing
%>

toury 2012-10-09
  • 打赏
  • 举报
回复
我随手打字,会有错。把修改的代码贴上来看看
加载更多回复(2)

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧